【问题标题】:Disallow to use multiple versions of NuGet packages in solution不允许在解决方案中使用多个版本的 NuGet 包
【发布时间】:2014-11-01 13:33:11
【问题描述】:

我们有一个复杂的 Visual Studio 解决方案,其中项目引用不同版本的相同 NuGet 包。

我觉得这是一种不好的做法,因为可能会导致 dll 地狱

那么 - 有没有办法控制这个?

理想情况下,它应该是以下任何一个的一部分:

  • 解决方案构建
  • TFS 门控签到
  • 使用任何 CI\CD 工具的交付管道。

我真的很喜欢Package Manager Console Powershell Reference。但我找不到在 VS 之外的外部 Powershell 脚本中使用这些 cmdlet(Get-Package 和 Get-Project -All)的方法。

我看到的最简单的解决方案是编写一个自定义 Powershell 脚本,该脚本读取 .sln 文件,获取所有项目并为每个项目读取 packages.config 和从那里获取所有 nuget 包版本。

或者...使用VS DTE来简化这项工作,但到目前为止我还没有使用它的经验。

然后......一旦我们有了这个脚本 - 我们就可以在 CI 中运行它。

有没有更简单\更标准的方式来做到这一点?

【问题讨论】:

    标签: visual-studio powershell tfs continuous-integration nuget


    【解决方案1】:

    您不必担心多个组件引用不同版本的包。 NuGet 就是为满足这种情况而构建的。

    使用 DLL hell,您不知道 A.DLL 是否可以与新版本的 B.DLL 一起使用。但是对于 NuGet,依赖项是通过一系列兼容的版本号显式指定的。

    NuGet 使用的版本解析是始终选择适合该范围的最低版本的依赖项

    阅读这里了解详细信息,它很好地解释了它:

    http://blog.davidebbo.com/2011/01/nuget-versioning-part-2-core-algorithm.html

    【讨论】:

    • demoncodemonkey,感谢您的回复和有用的链接。虽然它没有回答我最初的问题,但它肯定有助于理解 NuGet 的工作原理。我需要深入研究它,但目前我不明白一件事 - 为什么我会在 NuGet RestorePackages 期间将多个版本的包下载到包目录,如果 NuGet 自动选择适合所有引用项目的唯一版本.. .
    【解决方案2】:

    至少就nuget而言,nuget可以在不同的项目中安装不同版本的包。就是说不建议。至于恢复哪些包,它会查看包文件 (XML) 文件中的任何内容都将恢复。

    根据从项目/解决方案中删除包引用的方式,此文件可能会不同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多