Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 不允许在解决方案中使用多个版本的NuGet软件包_Visual Studio_Powershell_Tfs_Continuous Integration_Nuget - Fatal编程技术网

Visual studio 不允许在解决方案中使用多个版本的NuGet软件包

Visual studio 不允许在解决方案中使用多个版本的NuGet软件包,visual-studio,powershell,tfs,continuous-integration,nuget,Visual Studio,Powershell,Tfs,Continuous Integration,Nuget,我们有一个复杂的VisualStudio解决方案,其中的项目引用不同版本的相同NuGet包 我觉得这是一个不好的做法,因为可能会导致dll地狱 那么,有没有办法控制这种情况 理想情况下,它应该是以下任一部分的一部分: 解决方案构建 TFS门控签入 使用任何CI\CD工具时的交付管道 我真的很喜欢。但我找不到在VS之外的外部Powershell脚本中使用这些cmdlet(Get-Package和Get-Project-All)的方法 我看到的最简单的解决方案是编写一个自定义Powershell

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

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

那么,有没有办法控制这种情况

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

  • 解决方案构建
  • TFS门控签入
  • 使用任何CI\CD工具时的交付管道
我真的很喜欢。但我找不到在VS之外的外部Powershell脚本中使用这些cmdlet(Get-Package和Get-Project-All)的方法

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

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

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


有更简单\更标准的方法吗?

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

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

NuGet使用的版本分辨率总是选择符合范围的依赖项的最低版本

请阅读此处了解详细信息,它很好地解释了这一点:


至少就nuget而言,nuget可以在不同的项目中安装不同版本的软件包。也就是说这是不可取的。至于哪些包被还原,它会查看包文件(XML),文件中的任何内容都会被还原


此文件可能会失去同步,具体取决于从项目/解决方案中删除包引用的方式。

demoncodemonkey,感谢您的回复和有用链接。虽然它没有回答我最初的问题,但它确实有助于理解NuGet是如何工作的。我需要更深入地了解它,但目前我不明白一件事——如果NuGet自动选择适合所有引用项目的唯一版本,为什么我会在NuGet RestorePackages期间将多个版本的软件包下载到packages dir。。。