2017-02-27 80 views
2

我有三个.NET项目引用彼此类似如下:.NET核心传递依赖用于.NET 4.6项目

AProject-> BProject->的CProject,其中A和B是核心项目和C是一个.NET 4.6项目。

在进行一个项目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,或者如果我用另一个.NET核心项目更改Cproject,则一切正常。所以只有当我们对.NET 4.6项目有一个传递依赖时才会出现这个问题。

环境:

- NuGet Version: 3.5.0.1996 
- Visual studio 2015 
- .NET Core 1.0.1 
+0

你对.NET Core有什么意思? A和B的目标是'net46',而不是'netstandard1.3',所以它们不是.NET Core的所有 – Tseng

回答

0

首先,你的问题是不相关的.NET核心所有的,因为你的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)。

+0

谢谢@Tseng, 打包项目C不是我的选择,我愿意配置解决方案一个CI服务器(Jenkins) –

+0

另一点:假设我不能像你所描述的那样引用项目C,你怎么能解释一个事实:用VS恢复/构建工作正常,并且使用命令行失败? –

+0

打包和托管nuget源也可以在CI上完成,它只是在ProjectC上运行某个命令。不知道它为什么似乎为你工作,但这种情况是不支持的project.json(http://github.com/dotnet/core/issues/184),不会得到修正,因为它已被弃用,并取代现在与MSBuild兼容的csproj)。你应该(而不是稍后)迁移到VS2017,它是基于csproj的构建管道。 csproj支持不会为VS2015和(ASP)提供.NET Core 1.1是带有project.json支持的最后一个版本 – Tseng

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的参考。