NuGet 针对多个项目的解决方案

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

  • 核心
  • 用户界面
  • 测试

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

什么是 的方式来设置这个使用 NuGet?

  1. 当我需要一个参考资料时,我是否应该在所有三个项目中使用“添加库包参考资料”?
  2. 我是否应该在第一次需要一个包的时候使用“添加库包引用”,然后使用添加引用-> 浏览以供后续使用?

在这两种情况下,我应该有多少 Packages.config文件?

53331 次浏览

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

但是,您只需下载该包一次,并在本地为所有其他项目重用它们。

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

您甚至可以筛选 Get-Project -All命令并将项目列表的一个子集作为目标。

使用控制台以多个项目为目标

Tools > Library Package Manager > Package Manager Console

然后使用这个命令

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

比如说

Get-Project Core,UI | Install-Package FluentDateTime

这个甜蜜的交易适合我:

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

对于任何无意中发现这一点的人,现在有以下选择:

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

或者:

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

如果你进入安装包区域,你可以在解决方案中的每个项目中“管理”一个单独的包。

包管理器控制台中,你可以写下面的 指挥官:

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

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