【问题标题】:How to avoid duplication of NuGet packages如何避免重复 NuGet 包
【发布时间】:2013-10-19 20:53:24
【问题描述】:

是否有一个用于各种 NuGet 包的本地副本的中心位置,并且在中心位置的单个副本上有不同的 Visual Studio 解决方案 POINT,而不是将 NuGet 包复制到每个 VS 解决方案 \packages 目录中?

我知道磁盘空间很便宜,但是拥有多个 NUnit、EF 等副本似乎很浪费

【问题讨论】:

  • 1.磁盘空间便宜2.这个软件为什么这么臃肿?

标签: .net nuget


【解决方案1】:

当软件包有更新时会发生什么?你打算用新版本的包测试每个项目吗?

当包发生重大更改时会发生什么?

每个解决方案都拥有单独的软件包副本,您可以一次测试和更新一个。这是一件好事。

此外,大多数包裹都很小,以至于您需要数百甚至数千个副本才能注意到“浪费”。

几个例子
EF 4.3.1 为 2.84 MB。
NUnit 2.3.012054 为 795 KB。
Unity 2.1.505 为 1.45 MB。

别再担心这个了。这不值得你花时间。

【讨论】:

  • 虽然我完全同意“别担心这个,这不值得你花时间”我想指出,如果有多个版本的 NuGet 包,NuGet 会存储它们并更新个人项目的repositories.config。 =)
  • @J.Steen 很公平,我在想,当我在解决方案级别更新一个包时,所有项目也会更新。我忘记了其他解决方案中的项目不会受到影响。尽管如此,当多个版本安装在中心位置时,这可能会导致混淆使用哪个包。
  • 肯定的。它只会给你带来更多的头痛,甚至打扰它。 =)
  • @cadrell0 次要要求是需要有互联网连接,我们并不总是有......因此希望将包下载一次到本地目录,然后有任何新的解决方案使用它作为源
  • @SteveC,啊!但是您可以使用本地 NuGet 代理解决。有几篇关于这种事情的文章。我只是将我所有的包放在一个本地位置,在该位置指向一个额外的 NuGet 代理,然后就可以了。
【解决方案2】:

【讨论】:

    【解决方案3】:

    是的,从 NuGet 2.1 开始,这完全可以实现。

    1. 您需要将 NuGet.config 文件移动到一个中心位置。
    2. 更改 repositoryPath 配置值以指定所有包的中心位置 (NuGet docs)。
    3. 对目标文件进行一些修改,以从恢复命令中删除 solutionDir 选项。
    4. 更新所有项目引用以指向新位置。

    为避免重复,我在此答案中详细介绍了具体操作:https://stackoverflow.com/a/19466173/564726

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2021-08-17
      • 2015-09-12
      相关资源
      最近更新 更多