【问题标题】:NuGet for solutions with multiple projectsNuGet 用于具有多个项目的解决方案
【发布时间】:2011-03-24 12:09:09
【问题描述】:

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

  • 核心
  • 用户界面
  • 测试

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

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

  1. 我是否应该在需要参考的任何时候对所有三个项目都使用“添加库包参考”?
  2. 第一次需要包时是否应该使用“添加库包引用”,然后使用添加引用->浏览后续用法?

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

【问题讨论】:

    标签: .net nuget


    【解决方案1】:

    对于遇到此问题的任何人,现在有以下选择:

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

    ... 或者:

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

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

    【讨论】:

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

    使用控制台定位多个项目

    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 包”对话框,因为我们的解决方案非常大,我无法粘贴列表项目名称进入该对话框。
    【解决方案3】:

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

    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}
    • @EdwardMMeshuri 是非常好的命令,但它不会与包名称完全匹配。这是精确匹配的略微更新Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

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

      Package Manager Console中,您可以编写以下命令

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多