.NET 4.6项目的.NET核心传递依赖项

时间:2017-02-27 15:08:29

标签: .net visual-studio-2015 asp.net-core nuget .net-core

我有三个.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

2 个答案:

答案 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)。