NuGet - 在单一解决方案中管理和删除多版本包

Posted

技术标签:

【中文标题】NuGet - 在单一解决方案中管理和删除多版本包【英文标题】:NuGet - managing and removing multi version packages in single solution 【发布时间】:2012-04-14 02:00:17 【问题描述】:

场景

一个带有 n 个项目的 VS 解决方案。项目 A 引用包 Y v1,项目 B 引用包 Y v2。现在无法使用解决方案级别的 NuGet 包管理对话框更新解决方案中所有项目对包 Y 的所有引用,只有在所有项目都引用相同版本的包 Y 时才能执行此操作。不是很大只处理两个项目,但我正在处理许多项目,这些项目由于糟糕的包管理而引用了许多包版本,而它们应该都引用相同的版本。

在我花了一个下午编写控制台应用程序之前。自动更新解决方案的所有 package.config 文件,以便每个引用的包仅通过其最新版本引用(最新引用,不是最新版本,有例外/警告等)......是否有工具/方法可以做这已经?还是我不知道的其他方法?

【问题讨论】:

周五下午是个好时机! 你尝试过使用 sed 或 awk 吗? 我以为我今天这样做了....右键单击解决方案,管理软件包,更新?我发誓我就是这么做的? @Magrangs 你是对的,它可以工作,虽然我仍然必须一次做一个包(来自 daryal 的命令在我的情况下不起作用)我被引导相信它不是这样我有一种可怕的感觉,有些事情会出错:S 我很高兴我没有想到,可能会担心。 【参考方案1】:

首先,仅更改 xml 文件不足以让 NuGet 更改引用。实际上,有时您在手动修改 packages.config 文件时会出错。包管理器控制台能够更新解决方案中的所有包;您可以简单地调用“Get-Project -All | Update-Package”命令。

其次,在调用此命令之前,请确保您有适当的包源可用。

【讨论】:

该控制台命令报告没有可用于解决方案中每个项目中的所有包引用的更新,但有更新,我可以通过对话框一次更新一个。 您可以尝试删除解决方案中的 packages 文件夹(repositories.config 文件除外),然后再次运行该命令吗?【参考方案2】:

您可以在解决方案的 Nuget 包管理器中完成此操作(要找到菜单,请右键单击解决方案或进入工具->库包管理器)。此对话框中的更新选项卡将建议更新适用于更新的多个项目。这同样适用于从“已安装”选项卡中卸载。

或者在打开解决方案的情况下,打开 NuGet 控制台,运行“Update-Package”以更新所有项目的所有包。它还可以用于更新特定的包/项目:

Update-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Safe] [-Source <string>] [-IncludePrerelease]

它会找到与对话框中相同的更新,只需确保在“包源:”下拉列表中选择了正确的提要(或“全部”)。

示例:

PM> install-package NUnit -version 2.5.9.10348 -ProjectName ProjectA
Successfully installed 'NUnit 2.5.9.10348'.
Successfully added 'NUnit 2.5.9.10348' to ProjectA.

PM> install-package NUnit -version 2.5.10.11092 -ProjectName ProjectB
Successfully installed 'NUnit 2.5.10.11092'.
Successfully added 'NUnit 2.5.10.11092' to ProjectB.

PM> update-package
Updating 'NUnit' from version '2.5.9.10348' to '2.6.0.12054' in project 'ProjectA'.
Successfully removed 'NUnit 2.5.9.10348' from ProjectA.
Successfully installed 'NUnit 2.6.0.12054'.
Successfully added 'NUnit 2.6.0.12054' to ProjectA.
Successfully uninstalled 'NUnit 2.5.9.10348'.
Updating 'NUnit' from version '2.5.10.11092' to '2.6.0.12054' in project 'ProjectB'.
Successfully removed 'NUnit 2.5.10.11092' from ProjectB.
Successfully added 'NUnit 2.6.0.12054' to ProjectB.
Successfully uninstalled 'NUnit 2.5.10.11092'.

【讨论】:

以上是关于NuGet - 在单一解决方案中管理和删除多版本包的主要内容,如果未能解决你的问题,请参考以下文章

无法删除 MSVS 2019 中解决方案的已安装 Nuget 包

我如何解决Nuget DLL地狱-无论我做什么VS都坚持认为dll版本与软件包中的版本不同

Nuget包管理器控制台 - 包不包含清单

使用 NuGet 下载旧版本的包

手动删除引用nuget如何还原

慢nuget vs2017安装包android