【问题标题】:What is the proper handling for NuGet packages in a .NET solution?.NET 解决方案中 NuGet 包的正确处理方式是什么?
【发布时间】:2017-02-24 08:49:51
【问题描述】:

我有一个由不同项目组成的 C# 解决方案。

MySolution
+-- Project1
+-- Project2
|   +-- packages.config
+-- Project3
+-- packages
|   +-- System.Linq.4.0.0
|   +-- System.CodeAnalysis.CSharp.1.3.2

如您所见,我有 NuGet 依赖项。

声明依赖,安装它们

我的意思是,Visual Studio 已经创建了packages.config,其中包含我在项目中实际需要这些依赖项的依赖项列表。我想这很好。

此外,Visual Studio 将所有包安装在解决方案文件夹中的一个文件夹中。这也很好,因为像Project1(取决于Project2)这样的项目也需要引用这些包。

问题

我对这种安排表示怀疑:

  1. 在解决方案文件夹中而不是在其中一个项目中定义 packages.config 中的包不是更好吗?
  2. 如果项目使用不同的 NuGet 包,解决方案文件夹中的packages.config 将枚举所有这些包。还好吗?
  3. 如果我从每个项目中删除 packages.config 并在解决方案文件夹中添加 packages.config,Visual Studio 是否会在我每次更新/添加/删除包时更新该文件?
  4. 这是推荐的方法吗?

请注意,我已经尝试过了,除了第 3 点,Visual Studio 似乎无法识别我已安装的软件包外,它似乎很好。除此之外,这个问题与最佳实践非常相关。

【问题讨论】:

  • 你有没有想过在同一个文件夹中有多个解决方案文件?
  • @MichaelSpranger 好吧,我看不出有什么好处?做什么的?解决方案文件是指package.config?解决方案文件是MySolution.sln,我猜你有错字...
  • 我的意思是一个文件夹中有多个 .sln 文件。当我们想将不同组合的项目组合成一个解决方案时,我们有时会这样做。
  • @MichaelSpranger 但这对我有什么帮助?
  • 它不应该“帮助”你。我只是想提出一个问题,如果您提议的设置将支持一个文件夹中的多个 .sln 文件。

标签: c# .net visual-studio nuget nuget-package


【解决方案1】:

好吧,我就是这样做的,你也可以这样做。

在您的解决方案中,创建一个项目,例如 MyProject.Nugets。将所有 Nuget 安装到此项目中。该项目的输出将是开发文件夹中的一个文件夹。您的所有其他项目都将引用此文件夹中的 dll,并且没有其他项目将具有 packages.config

好处:

  1. 所有项目都将引用相同版本的包。
  2. Nugets 的集中控制项目,而不是多个 packages.config。

【讨论】:

【解决方案2】:

您需要解决方案中每个项目的 packages.config,以便您可以跟踪解决方案所需的包。您可以管理每个项目或每个解决方案的包。这允许您在不同的项目中拥有相同包的不同版本。 如果你不熟悉包管理器https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui。除此之外,只需设置您的包恢复。

【讨论】:

    【解决方案3】:

    NuGet 团队 deprecated solution level packages 在 NuGet 3.0 中,他们不打算继续支持他们。有一个 discussion 关于以与 Visual Studio 2013 兼容的方式为 NuGet 的未来版本带回解决方案级别的包。

    此弃用未公布明显和详细的原因。根据我个人的经验,这种弃用的原因应该是不同项目引用同一包的不同版本的问题,而解决方案级别的包是不可能的。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 2022-06-29
      • 2018-04-02
      相关资源
      最近更新 更多