NuGet针对多个项目的解决scheme

假设我有3个项目的解决scheme:

  • 核心
  • UI
  • testing

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

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

  1. 我应该在任何时候使用“添加库包参考”三个项目,我需要一个参考?
  2. 我应该在第一次使用“添加库包参考”时,需要一个包,然后使用添加引用 – >浏览以供后续使用?

在这两种情况下,我应该有多less个packages.config文件?

对于有人绊倒这个,现在有以下select:

右键单击您的解决scheme>pipe理NuGet软件包解决scheme…

… 要么:

工具>库包pipe理器>pipe理解决scheme的NuGet包…

如果您转到“已安装的软件包”区域,则可以在解决scheme的每个项目中“pipe理”一个软件包。

您可以使用控制台来定位多个项目

 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} 

如果你想在多个解决scheme中安装一个软件包,我写了一个方便的Powershell脚本来实现,参见这里 。

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

您应该在解决scheme中的每个项目上为所有外部库使用“添加库包参考”。 你将最终为每个项目的packages.config。

不过,您只需下载一次该软件包,然后在本地为所有其他项目重新使用它们。

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

 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)