在Visual Studio中跨多个共享项目和解决方案保持NuGet包同步的正确方法是什么?我们在多个解决方案中共享200多个项目。每个TRACK都有一些解决方案,其中包含部分或全部轨道项目。我们还有多个PLATFORM解决方案,可以提供多个轨道以及任何数量的轨道项目。不幸的是,我们有一些供应商定期推出其软件包的更新,开发人员在使用不同解决方案时无意中安装/更新软件包。无论使用何种解决方案,我们都需要确保更新包。
不幸的是,NuGet的网站讨论了如何执行实际更新,而不是如何同步所有内容...... http://docs.nuget.org/docs/start-here/Managing-NuGet-Packages-Using-The-Dialog#Updating_a_Package
答案 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项目中部分使用了这种方法:
使用扩展名 .props 创建新文件,例如: Versions.props
对于解决方案中的每个程序包(在所有项目中),请创建具有相应版本的属性(可以使用version ranges)
<Project>
<PropertyGroup>
<log4netVersion>2.0.8</log4netVersion>
<UnityVersion>5.9.*</UnityVersion>
</PropertyGroup>
</Project>
<Import Project=".\version.props" />
<ItemGroup>
<PackageReference Include="Unity" Version="$(UnityVersion)" />
<PackageReference Include="log4net" Version="$(log4netVersion)" />
</ItemGroup>
如上所述,此过程必须手动完成。使用nuget软件包管理器安装nuget软件包将覆盖版本属性!
dotnet restore
以更新所有软件包,并dotnet list package
列出每个项目中所有请求和解决的软件包!