如何在多个共享项目和解决方案之间同步NuGet软件包?

9
在Visual Studio中,如何保持多个共享项目和解决方案中的NuGet包同步的正确技术是什么?我们在多个解决方案中共享200多个项目。每个跟踪都有几个解决方案,其中包含一些或所有跟踪的项目。我们还有几个平台解决方案,它们拉取多个跟踪以及任意数量的跟踪项目。不幸的是,我们有一些供应商定期推出其软件包的更新,而开发人员则会在不同的解决方案中无意中安装/更新软件包。我们需要确保这些软件包被更新,而不管使用它们的解决方案是哪一个。
不幸的是,NuGet网站讨论了如何执行实际更新,但没有讨论如何同步所有内容... http://docs.nuget.org/docs/start-here/Managing-NuGet-Packages-Using-The-Dialog#Updating_a_Package

1
请参考相关问题:https://dev59.com/el8d5IYBdhLWcg3weiB- - davidpricedev
4个回答

8
这并不是完全正确的,你是可以使用Visual Studio 2010/2012内置工具来实现这一功能的。
为了同时更新所有项目中的包,你可以在解决方案级别下打开“管理NuGet程序包”对话框。
所以右键单击解决方案,然后选择“管理解决方案的NuGet程序包”。 然后,你就可以开始操作了!
虽然它不会自动“同步”,但它确实允许你看到哪些地方存在重复,并帮助你将每个项目移动到你想要使用的NuGet包的正确版本。
这不是万无一失的方法,但它会有所帮助。

3

可以在一个单独的.props文件中维护解决方案中所有Nuget版本。但是,这个过程需要手动执行一些步骤。我曾经在github上看到dotnet/cli项目部分地使用了这种方法:

  1. 创建一个具有扩展名.props的新文件,例如:Versions.props

  2. 对于解决方案中的每个包(在所有项目中),创建一个具有相应版本的属性(可以使用版本范围

<Project>
  <PropertyGroup>
    <log4netVersion>2.0.8</log4netVersion>
    <UnityVersion>5.9.*</UnityVersion>
  </PropertyGroup>
</Project>
  1. 在每个 .cspoj 文件中导入 .props 文件
<Import Project=".\version.props" />
  1. .cspoj 文件中的版本号替换为 .props 文件中相应的属性形式
<ItemGroup>
    <PackageReference Include="Unity" Version="$(UnityVersion)" />
    <PackageReference Include="log4net" Version="$(log4netVersion)" />   
</ItemGroup>

如上所述,此过程必须手动完成。使用nuget包管理器安装nuget包将覆盖版本属性!
5. 在解决方案上运行dotnet restore以更新所有包,并运行dotnet list package列出每个项目请求和解析的所有包!

*enter image description here*


3
很遗憾,没有真正好的方法来完成这个任务。我们运行自己的NuGet存储库。当我们想强制更新某个软件包时,我们会完全删除旧版本并上传新版本。
当然,这并不能保证开发人员拉取最新的软件包,因此我们已将其作为CI流程的一部分,在构建之前自动提取所有NuGet软件包到解决方案中,所以如果某个软件包被更新而开发人员尚未跟上步伐,则他们的下一次提交会导致CI构建失败,迫使他们去修复它。
这有点像一个变通方法,但这是我们能想到的最好的办法。

0

从VS 2017开始,您可以使用Consolidate tab来同步解决方案中的项目。

或者,作为替代方案,您可以使用NuGet CLI命令Sync-Package,而不是合并选项卡https://learn.microsoft.com/en-us/nuget/reference/ps-reference/ps-ref-sync-package

示例

# Sync the Elmah package installed in the default project into the other projects in the solution
 Sync-Package Elmah

跨多个解决方案同步项目不受原生支持(这是有道理的,因为在独立的解决方案中保留不同版本没有问题)。 但是你可以通过一个技巧来实现-创建一个包含所有要升级和同步的解决方案中的项目的大型解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接