ChatGPT解决这个技术问题 Extra ChatGPT

NuGet 用于具有多个项目的解决方案

假设我有一个包含 3 个项目的解决方案:

用户界面

测试

我使用的一些 NuGet 包将适用于所有 3 个项目。有些只适用于 UI 和测试,有些只适用于测试(如 NUnit)。

使用 NuGet 进行设置的正确方法是什么?

我是否应该在需要参考时在所有三个项目上使用“添加库包参考”?我是否应该在第一次需要包时使用“添加库包引用”,然后使用添加引用->浏览以进行后续使用?

无论哪种情况,我应该拥有多少个 packages.config 文件?


J
Jason

对于任何偶然发现这一点的人,现在有以下选项:

右键单击您的解决方案 > 管理解决方案的 NuGet 包...

... 或者:

工具 > 库包管理器 > 管理解决方案的 NuGet 包...

如果您转到已安装的包区域,您可以在解决方案中的每个项目中“管理”单个包。


如果我想为特定版本的解决方案安装包怎么办。向导没有给我那个选项。在控制台中,我可以像 Install-Package RazorEngine -Version 3.3.0 那样运行它,但它仅适用于在控制台下拉列表中选择的项目。
这在 Visual Studio 2010 中是否支持。我只是在这里问了一个问题 -stackoverflow.com/questions/33163987/…
如果您有一个非常大的项目,您真的会信任包管理器来更新依赖项吗?
您是否知道某些特定软件包没有“管理”按钮?像 System.ServiceModel 一样,我无法从解决方案视图管理此库。
@Mick,查看上述对话框中的“合并”选项卡......我会的!
S
Simon

使用控制台定位多个项目

Tools > Library Package Manager > Package Manager Console

然后使用这个命令

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

例如

Get-Project Core,UI | Install-Package FluentDateTime

+1:至少对于当前的 NuGet 版本,我仍然更喜欢这种方法,而不是“管理解决方案的 NuGet 包”对话框,因为我们的解决方案非常大,我无法将项目名称列表粘贴到该对话框中。
r
rasx

这个甜蜜的交易对我有用:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

这就是它的完成方式!例如,如果您想列出解决方案中所有项目的所有 json.net 版本,请尝试以下操作:Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}
@EdwardMMeshuris 非常好的命令,但它不会与包名称完全匹配。这是完全匹配Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }的略微更新
A
Aaron Powell

如果您想跨多个解决方案安装一个包,我为此编写了一个方便的 Powershell 脚本,请参阅 here

您甚至可以过滤 Get-Project -All 命令并定位项目列表的子集。


N
Nekresh

您应该为解决方案中每个项目的所有外部库使用“添加库包引用”。您最终会得到每个项目的 packages.config。

但是,您只需下载一次包,然后在本地将它们用于所有其他项目。


注意:如果你不更新所有的库包,你最终会得到同一个程序集的 3 个不同版本。 .NET 可以使用 3 个不同的版本,如果它们在 GAC 中或具有不同的名称。但是因为它们将具有相同的名称。由于旧版本是在新版本上复制的,因此您最终会得到不工作的构建。
D
Dark_Knight

在包管理器控制台中,您可以编写以下命令:

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

您也可以使用该命令进行安装或更新(更新包)