如何在不使用Nuget UI或命令行工具的情况下手动更新Nuget包

4
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我正在开发一个包含250多个项目的大型解决方案。使用Visual Studio Nuget UI或Nuget命令行工具更新所有这些项目中使用的共同Nuget包需要2到3个小时。我正在寻找一种通过手动更新文件来更快地完成此操作的方法。

我的第一个想法是我只需要在每个项目的*.config文件中更新软件包版本号。例如,查找和替换

<package id="ThisPackage" version="0.0.0.1" targetFramework="net452" />

使用

<package id="ThisPackage" version="0.0.0.2" targetFramework="net452" />

这似乎是通过VS Nuget UI执行更新时实际发生的情况,因此我认为这样做然后重新构建解决方案将处理所有内容,有点像手动编辑package.json中的依赖项,然后在Node中运行npm install
然而,这种方法不起作用; .csproj文件中的引用在构建时不会像Nuget更新配置文件时那样得到更新。
我可以手动更新.csproj文件,例如查找和替换。
<HintPath>..\..\packages\ThisPackage.0.0.0.1\

使用

<HintPath>..\..\packages\ThisPackage.0.0.0.2\

但是我想我也需要更新引用的程序集版本,我不确定如何确定它们应该是给定Nuget包版本的什么。此外,在这一点上,尽管只需要半小时的工作时间而不是三个小时的空闲时间,但变得有些棘手和容易出错。

有没有人找到了一种方法来在解决方案中的大量项目中更新Nuget包,而不需要花费多个小时的时间?


事实证明,只要先关闭 Visual Studio,使用 Nuget 命令行界面更新包会更快。在我的情况下,大约需要 5 分钟。例如:nuget update -id Package.Id mysolution.sln - Tim Barclay
2个回答

3

包更新时间由下载包和卸载/安装包组成。在第一次下载时,只会执行一次下载操作,因此卸载/安装操作将占用几乎所有的更新时间。所以你可以接受Kiliman的建议,在开始之前先检查您的机器性能。

如果您想根据自己的步骤手动更新所有这些包。您可以按照以下步骤来减少更新时间:

  • 下载更新包并将其放置在本地软件包存储库中。
  • 解压缩软件包,然后找到引用的程序集版本。或者您可以使用NuGet Package Explorer工具获取引用的程序集版本。
  • 批量替换所有package.config中的包版本
  • 通过第三方工具(例如notepad ++)批量替换所有.csproj文件中的软件包版本和引用程序集版本。

感谢提到Nuget包浏览器。看起来非常有用。 - Tim Barclay
我已经编写了一个Linqpad脚本来自动化这个过程,基于@Wendy - MSFT的回答中的步骤。它在github上 https://github.com/timbarclay/BulkNugetUpdater。在我的解决方案中,它只需要10到15秒,而不是3小时,并且似乎工作正常。 - Tim Barclay

0

我不会尝试手动更新软件包,除非你使用的是.NET Core,因为它将NuGet软件包视为一等公民。

现在,下载软件包、更新项目引用等操作太过繁琐,如果自己尝试做这些操作,很容易出错。

也许真正的问题是为什么更新软件包需要这么长时间。你是否添加了其他NuGet存储库?也许其中一个超时了。

你是否尝试运行Fiddler来查看是否有多余的网络请求?这个问题是在所有计算机上都出现还是只在特定的计算机上出现?它们是开发人员工作站还是构建服务器?


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