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

时间:2011-03-24 12:09:09

标签: .net nuget

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

  • 核心
  • UI
  • 测试

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

使用NuGet设置此功能的正确方式是什么?

  1. 我是否需要在所有三个项目中使用“添加库包参考”?
  2. 我第一次需要包时是否应该使用“添加库包参考”,然后使用添加参考 - >浏览后续用法?
  3. 在任何一种情况下,我应该有多少 packages.config 文件?

6 个答案:

答案 0 :(得分:232)

对于任何绊倒这个的人,现在有以下选项:

  

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

......或者:

  

工具>库包管理器>管理NuGet包以获得解决方案......

如果您进入已安装的软件包区域,您可以“管理”#39;解决方案中每个项目的单个包。

答案 1 :(得分:75)

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

Tools > Library Package Manager > Package Manager Console

然后使用此命令

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

例如

Get-Project Core,UI | Install-Package FluentDateTime

答案 2 :(得分:19)

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

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

答案 3 :(得分:12)

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

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

答案 4 :(得分:8)

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

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

答案 5 :(得分:2)

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

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)