C# 在ASP.NET vNext中使用Ninject时出现编译器错误CS0246(找不到类型或命名空间)

C# 在ASP.NET vNext中使用Ninject时出现编译器错误CS0246(找不到类型或命名空间),c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我想在Asp.NETVNEXT类库中使用Ninject。但是我得到了编译器错误CS0246(“找不到类型或名称空间名称'Ninject') 以下是我所做的: 1) 创建新的ASP.NET vNext类库 2) 编辑project.json: { "dependencies": { "Ninject": "3.2.2.0" }, "configurations" : { "net451" : { "

我想在Asp.NETVNEXT类库中使用Ninject。但是我得到了编译器错误CS0246(“找不到类型或名称空间名称'Ninject')

以下是我所做的:

1) 创建新的
ASP.NET vNext类库

2) 编辑
project.json

{         
    "dependencies": {
        "Ninject": "3.2.2.0"
    },
    "configurations" : {
        "net451" : { 
            "dependencies": {
            }
        },
        "k10" : { 
            "dependencies": {
                "System.Runtime": "4.0.20.0"
            }
        }
    }
}
3) 检查包管理器日志:

Restoring packages for C:\Projects\ClassLib1\project.json
Attempting to resolve dependency ClassLib1 >= 1.0.0
Attempting to resolve dependency Ninject >= 3.2.2.0
  GET https://www.nuget.org/api/v2/FindPackagesById()?Id='Ninject'
Attempting to resolve dependency mscorlib >= 
Attempting to resolve dependency System >= 
Attempting to resolve dependency System.Core >= 
Attempting to resolve dependency Microsoft.CSharp >= 
Attempting to resolve dependency ClassLib1 >= 1.0.0
Attempting to resolve dependency Ninject >= 3.2.2.0
Attempting to resolve dependency System.Runtime >= 4.0.20.0
  OK https://www.nuget.org/api/v2/FindPackagesById()?Id='Ninject' 1250ms
  GET https://www.nuget.org/api/v2/FindPackagesById?id='Ninject'&$skiptoken='Ninject','3.0.2-unstable-9057'
  OK https://www.nuget.org/api/v2/FindPackagesById?id='Ninject'&$skiptoken='Ninject','3.0.2-unstable-9057' 179ms
  GET https://www.nuget.org/api/v2/package/Ninject/3.2.2
  OK https://www.nuget.org/api/v2/package/Ninject/3.2.2 949ms
Resolving complete, 2531ms elapsed
Installing Ninject 3.2.2.0
Restore complete, 2755ms elapsed
看起来不错

4) 编辑
Class1.cs

using Ninject;

namespace ClassLib1
{
    public class Class1
    {
        public Class1()
        {
            var kernel = new StandardKernel();
        }
    }
}
Intellisense可以解析对Ninject的引用

5) 我得到了CS0246:

1>------ Build started: Project: ClassLib1, Configuration: Debug Any CPU ------
1>  Building ClassLib1 .NETFramework,Version=v4.5.1
1>  Building ClassLib1 K,Version=v1.0
1>C:\Projects\ClassLib1\Class1.cs(1,7): error CS0246: The type or namespace name 'Ninject' could not be found (are you missing a using directive or an assembly reference?)
1>C:\Projects\ClassLib1\Class1.cs(9,30): error CS0246: The type or namespace name 'StandardKernel' could not be found (are you missing a using directive or an assembly reference?)
1>  
1>  Build failed.
1>      0 Warnings(s)
1>      2 Error(s)

有什么问题吗?

云优化的CLR(CoreCLR或K10)无法使用NInject。此外,VS 2014中存在一个已知问题,即无论您在项目属性中选择了什么,它都会构建所有可用的配置(在您的情况下是net451和k10),这就是为什么您会在K下看到这两行和错误:

1>  Building ClassLib1 .NETFramework,Version=v4.5.1
1>  Building ClassLib1 K,Version=v1.0
如果您需要NInject,并且希望同时以桌面CLR和核心CLR为目标,那么像我一样使用
#If K10
#If NET45
条件编译块。基本上,您将为桌面CLR使用NInject,为核心CLR使用现成的DI容器


如果希望应用程序仅在桌面CLR上运行,请从
project.json

中删除K10配置,本例中为:。他们在project.json中有一个奇怪的行——“Microsoft.Framework.DependencyInjection”:“”,也许这就是ninject的问题所在?不。我用
Microsoft.Framework.DependencyInjection
Microsoft.Framework.DependencyInjection.ninject
测试了它。其他阅读本文的人都犯了同样的错误,您可能需要取消对“aspnetcore50”目标框架的注释。