如何在多个共享项目中同步NuGet包&解决方案?

时间:2014-03-08 23:42:44

标签: visual-studio visual-studio-2012 nuget nuget-package

在Visual Studio中跨多个共享项目和解决方案保持NuGet包同步的正确方法是什么?我们在多个解决方案中共享200多个项目。每个TRACK都有一些解决方案,其中包含部分或全部轨道项目。我们还有多个PLATFORM解决方案,可以提供多个轨道以及任何数量的轨道项目。不幸的是,我们有一些供应商定期推出其软件包的更新,开发人员在使用不同解决方案时无意中安装/更新软件包。无论使用何种解决方案,我们都需要确保更新包。

不幸的是,NuGet的网站讨论了如何执行实际更新,而不是如何同步所有内容...... http://docs.nuget.org/docs/start-here/Managing-NuGet-Packages-Using-The-Dialog#Updating_a_Package

3 个答案:

答案 0 :(得分:5)

这在技术上并不正确,您无法做到这一点。您可以使用Visual Studio 2010/2012中的内置工具为您执行此操作。

为了同时更新所有项目中的包,您可以在解决方案级别启动Manage NuGet Packages对话框。

因此,右键单击解决方案,然后选择"管理解决方案的NuGet包"。并且presto!你离开了!

现在,虽然它赢得了&#t;同步"它们会自动显示,它允许您查看重复项的位置,并帮助您将每个项目移动到要使用的正确版本的nuget包。

不是银弹,但它会有所帮助。

答案 1 :(得分:3)

不幸的是,没有什么好方法可以做到这一点。我们所做的就是运行我们自己的NuGet存储库。当我们想要强制更新包时,我们会完全删除旧版本,并上传新版本。

这并不保证开发人员当然会提取最新的软件包,所以我们已经将它作为CI过程的一部分,在构建之前自动将所有NuGet软件包拉入解决方案中,因此如果某些软件包更新了开发人员没有赶上,他们的下一次提交将失败CI构建,迫使他们去修复它。

这是一种解决方法,但它是我们能够想出的最好的......

答案 2 :(得分:0)

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

  1. 使用扩展名 .props 创建新文件,例如: Versions.props

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

<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软件包将覆盖版本属性!

  1. 在解决方案上运行dotnet restore以更新所有软件包,并dotnet list package列出每个项目中所有请求和解决的软件包!

*enter image description here*