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

标签 c# asp.net asp.net-core

我想在 Asp.Net vNext 类库中使用 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 的引用。

enter image description here

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)

怎么了?

最佳答案

NInject 不可用于云优化 CLR(CoreCLR 或 K10)。此外,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 条件编译 block ,就像我做的那样 here 。基本上,您将为桌面 CLR 使用 NInject,为核心 CLR 使用开箱即用的 DI 容器。

如果您希望您的应用仅在 Desktop CLR 上运行,请从 project.json 中删除 K10 配置。

关于c# - 在 ASP.NET vNext 中使用 Ninject 时出现编译器错误 CS0246(未找到类型或命名空间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204465/

相关文章:

c# - 在 XSD 的枚举中指定值

c# - 如何在 C# 中向 UserControl 添加事件?

C# - 将 HTML 无序列表转换为 JSON 数组

c# - 为什么 .net 核心依赖注入(inject)对我不起作用?

asp.net - 实体类型 'Customer' 无法映射到表,因为它是从 'ApplicationUser' 派生的

c# - SQL BULK INSERT 的替代方案

c# - C# 中空文字的类型

c# - 跨页面发布

asp.net - ASP.NET MVC3 中具有多个类的 ActionLink

c# - 尝试激活 'Microsoft.AspNetCore.Identity.SignInManager` 时无法解析类型 'xxxxx.LoginModel' 的服务