【问题标题】:.NET Core transitive Dependency for a .NET 4.6 Project.NET 4.6 项目的 .NET Core 传递依赖项
【发布时间】:2017-07-18 06:20:33
【问题描述】:

我有三个相互引用的 .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" 
        }
      }
    }
  }
}

使用 Visual Studio 进行 NuGet 还原和构建工作正常,但使用命令行进行 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

【问题讨论】:

  • .NET Core 是什么意思? A 和 B 都针对 net46,而不是 netstandard1.3,因此它们根本不是 .NET Core

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


【解决方案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 的引用。

【讨论】:

    【解决方案2】:

    首先,您的问题与 .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 从现在开始被弃用)。

    【讨论】:

    • 谢谢@Tseng,打包项目C不是我的选择,我愿意在C.I服务器(Jenkins)中配置解决方案
    • 另一点:假设我不能像您描述的那样引用项目 C,您如何解释使用 VS 恢复/构建工作正常并且使用命令行失败的事实?
    • 打包和托管 nuget 源代码也可以在 CI 上完成,它只是在 ProjectC 上运行某个命令。不知道为什么它一开始似乎对您有用,但是 project.json 不支持这种情况(github.com/dotnet/core/issues/184 并且无论如何都不会得到修复,因为它现在已被弃用并替换为与 MSBuild 兼容的 csproj)。您应该(而不是迟早)迁移到 VS2017,它是基于 csproj 的构建管道。 VS2015 将不再支持 csproj,并且 (ASP).NET Core 1.1 是最后一个支持 project.json 的版本
    • 而且由于 VS2017 在几周内发布并拥有完整的 msbuild 支持。再坚持使用 VS2015 也没有意义了。或者您也将您的 ProjectC 转换为 xproject。变化不大。大多数库确实同时拥有 VS2015 的 csproj 和 xproj。一个用于为较新的项目类型构建经典的东西和 xproj
    • 最后我选择创建一个本地 NuGet repo,打包项目 C,并将其作为第三方库处理,我也能够按照你的建议在 CI 服务器上制作它。
    猜你喜欢
    • 2016-11-26
    • 2017-08-16
    • 1970-01-01
    • 2017-07-23
    • 2021-03-22
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多