为什么我的 Core 1 库在 ASP.NET Core 1.0 (MVC6) 项目中无法被识别?

7

我有一个小的类库(Core 1),它是独立的,以便其他应用程序也可以使用,并且出于所有这些原因。它仅包含POCO模型类和DbContext衍生类。项目文件如下所示:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
        "NETStandard.Library": "1.5.0-rc2-24027",
        "System.ComponentModel.Annotations": "4.1.0"
    },
    "frameworks": {
        "netstandard1.5": {
            "imports": "dnxcore50"
        }
    }
}

然后我有一个 ASP.NET Core Web 应用程序 (.NET Core),我希望在其中使用类库。几乎所有我查看的资料都说只需将该库添加到主项目文件中的 dependencies 部分即可。它就在那里,就在顶部:

"dependencies": {
    "WideWorld.Filing": "1.0.0.0",
    "Microsoft.NETCore.App": {
        "version": "1.0.0-rc2-3002702",
        "type": "platform"
    },
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final",

我甚至在主项目中看不到库命名空间WideWorld.Filing,但可以显然地看到它的命名空间WideWorld.Office。我对Core 1非常非常陌生,之前只搭建过单体web应用程序,所以如果我错过了一些显而易见的东西,请原谅我的无知。

如果我在主项目上进行包恢复,我会在日志中收到三个警告(还有其他看起来无害的东西):

warn : Detected package downgrade: Microsoft.EntityFrameworkCore.SqlServer from 1.0.0 to 1.0.0-rc2-final 
warn :  WideWorld.Office (>= 1.0.0) -> WideWorld.Filing (>= 1.0.0) -> Microsoft.EntityFrameworkCore.SqlServer (>= 1.0.0) 
warn :  WideWorld.Office (>= 1.0.0) -> Microsoft.EntityFrameworkCore.SqlServer (>= 1.0.0-rc2-final)

没有MVC6。https://blogs.msdn.microsoft.com/webdev/2016/01/19/asp-net-5-is-dead-introducing-asp-net-core-1-0-and-net-core-1-0/ - Tseng
请勿使用工具/SDK的RC版本,它已经发布了将近2个月 https://blogs.msdn.microsoft.com/dotnet/2016/06/27/announcing-net-core-1-0/ - Tseng
1
曾先生,我非常清楚这一点,但是这些名称只是最近更改的,很多人知道它是MVC 6,而我宁愿追求实用性而不是完美。无论如何,我已经更新了它。 - ProfK
关于这个问题,它们是否在同一个解决方案中?并且是否在全局.json文件的“projects”属性指定的文件夹中列出的相同文件夹中? - Tseng
1
不应混合使用软件包版本,这样非常糟糕。您的EntityFrameworkCore软件包来自RTM(版本1.0.0),而您的项目其余部分是RC2。我建议首先将所有目标都指向相同版本的.NET Core(1.0.0),并将您的RC2项目升级到RTM。例如,RTM使用netstandard1.6标识符。 - Tseng
显示剩余10条评论
1个回答

3
问题在于您混合使用了不同版本的包。例如,RTMRC2包是不兼容的。您应该将所有内容都针对RC2(我不建议这样做),或者采取更可取的方法,将所有包引用升级到RTM,并将版本定位到1.0.0
更多详细信息请参见此处
注意,我省略了"import": "dnxcore50"
{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
        "NETStandard.Library": "1.6.0",
        "System.ComponentModel.Annotations": "4.1.0"
    },
    "frameworks": {
        "netstandard1.5": { }
    }
}

同样,在另一个project.json文件中进行如下操作:
"dependencies": {
    "WideWorld.Filing": "1.0.0.0",
    "Microsoft.NETCore.App": {
        "version": "1.0.0",
        "type": "platform"
    },
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0"

有关软件包的更多细节信息。


只有一个答案,而且是正确的。我还没有测试过它,但据我所知,它很有道理。 - ProfK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接