我有三个.NET项目互相引用,如下所示:
AProject-> BProject-> CProject ,其中A和B是核心项目,C是.NET 4.6项目。
AProject json 文件:
{
"version": "1.0.0-*",
"frameworks": {
"net46": {
"dependencies": {
"ProjectB": {
"target": "project"
}
}
}
}
}
BProject json 文件:
{
"version": "1.0.0-*",
"frameworks": {
"net46": {
"dependencies": {
"ProjectC": {
"target": "project"
}
}
}
}
}
NuGet使用Visual Studio恢复和构建工作正常,但使用命令行恢复NuGet失败,并出现以下错误:
Unable to resolve 'CProject' for '.NETFramework,Version=v4.6'
备注:如果我从解决方案中删除AProject或者如果我将Cproject更改为另一个.NET核心项目,一切正常。因此,只有当我们对.NET 4.6项目具有传递依赖时才会出现问题。
环境:
- NuGet Version: 3.5.0.1996
- Visual studio 2015
- .NET Core 1.0.1
答案 0 :(得分:1)
我可以在我的环境中完全重现您的问题。 NuGet还原包基于packages.config文件或project.json文件。当我们使用NuGet命令行恢复.sln文件时,NuGet将检查每个项目中的packages.config / project.json文件。
对于这种结构,AProject-> BProject-> CProject,NuGet将在projectA.json上恢复Aproject基础的包。但是只有在ProjectA.json文件中定义了依赖项“ProjectB”,ProjectB.json文件中定义的依赖项“ProjectC”和ProjectC使用packages.config来管理nuge包。对project.json文件和packages.config之间的信息转换必须有一些限制。因此,当恢复基于ProjectA.json文件的依赖“ProjectC”时,将会出现该错误。
要解决此问题,您可以直接添加CProject作为AProject的参考。
答案 1 :(得分:0)
首先,您的问题根本与.NET Core无关,因为您的xproj文件仍然定位net46
而不是netstandard1.3
(或更低)。
如果你唯一的问题是你不能引用Project C,那么你需要将ProjectC打包成一个nuget包,设置一个nuget源并将它添加到你的NuGet.Config(http://www.visualstudio.com/en-us/docs/package/nuget/consume)。
或者使用Visual Studio 2017,它允许您直接引用csproj中的4.x * .dll(从现在开始不推荐使用xproj和project.json)。