【问题标题】:Do I have to include all System.Collections.Immutable dependencies?我是否必须包含所有 System.Collections.Immutable 依赖项?
【发布时间】:2015-08-24 16:17:49
【问题描述】:

我刚刚从(较旧的)Microsoft.Bcl.Immutable NuGet 包切换到System.Collections.Immutable,并惊讶地发现我的项目中所有这些新包依赖项:

System.Collections
System.Diagnostics.Debug
System.Globalization
System.Linq
System.Resources.ResourceManager
System.Runtime
System.Runtime.Extensions
System.Threading

它们被列为 NuGet 包的依赖项,因此它们有权在那里,但它们显然也已经安装在我的 PC 和我的目标环境 (Azure btw) 上,因为它们随框架一起提供。

我的项目中已经有大量的包,如果可能的话,我希望避免这 8 个包造成的额外开销(并且不会自欺欺人)。

删除这些依赖项是否安全?
我现在是否必须在整个项目中使用这些包,因为它们可能与其安装的版本不同,并且我的项目的某些部分现在可能使用了错误的包? (由于某些 DLL 链接疯狂?)

编辑: 只是为了完整起见,因为之前有评论:依赖项是实际的包(不是命名空间)并且必须下载,我的目标是使用 .NET 4.6 进行编译,正在工作在 VS2015 中。虽然有些东西已经过时并且包不必正常加载,但完全有可能?

【问题讨论】:

  • @Jodrell .NET v4.6,刚刚从 v4.5.2 迁移了所有内容,并在此过程中注意到了过时的 Bcl.Immutable 包。
  • 我猜你可以省略依赖项,因为 4.6 发布了所有这些包在 4.0.0 或更高版本。我没试过,所以觉得没有资格提交答案。
  • 如果它们已被引用,请检查您的引用是否比 NuGet 的更新,然后您可以删除额外的引用并将程序集重定向放入 web.config 以便系统加载较新的版本此处描述:msdn.microsoft.com/en-us/library/…
  • @Lukos 我实际上没有引用任何列出的 DLL(在使用 Immutable 的项目中)。即使——是否需要程序集重定向?当我以 .NET 4.6 为目标时,保证所有这些 DLL 都存在(至少现在要求 >= 4.0.0)。除此之外,我相信 NuGet 在解决依赖关系时不会考虑 app.configs - 是吗?
  • NuGet 没有,但如果不可变类正在寻找特定的旧版本,则重定向将起作用。我的意思是允许 NuGet 将它们全部拉入,然后使用重定向删除不需要的旧引用以确保它不会倒下。

标签: c# .net nuget nuget-package immutable-collections


【解决方案1】:

您只是看到了 Nuget 包的副作用,它必须让 很多 人开心。该软件包支持大量目标,最近它正在迅速增加。我看到了对 OSX 和 iOS、Windows Phone 8.0 和 8.1、Windows Store、CoreCLR(开源项目)、.NET 4.5、iOS 和 Android 的 MonoTouch 以及 .NETCore(Silverlight)的支持。

这些依赖包只包含 reference 程序集,通常安装在您的 c:\program files x86\reference assembly 目录中。 Nuget 包不会冒险丢失此类参考程序集,它包含整个套件和 kaboodle。

全部下载完成后,包安装程序运行并在项目中添加您实际需要的引用。很容易看到发生了什么,只需打开项目的 References 节点。如果您的目标是 .NET 4.5 及更高版本的桌面版本,则添加的引用总数是一个,只有 System.Collections.Immutable。是的,您可以删除它们。

【讨论】:

  • 确实,除了Immutable 之外没有添加任何引用。然而,我主要关心的是包本身——它们现在在我的packages.config 中,每当我清理包目录时都会下载(当然这不会经常发生,但仍然——如果我不需要它,我'我想删除它)。那么,您能否澄清一下 Hans:当您说“您可以删除它们”时,您指的是参考资料,还是 packages.config 中的包?
  • packages.config 和子目录中的条目。
  • 使用 project.json 会变得更好......依赖项的依赖项不再进入文件。
  • 也许值得补充的是 it's supposed to be fixed in the next version of the package: "chcosta 于 2015 年 11 月 30 日发表评论:已提交对此的修复,并将在下一次包推送中提供。"
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 2018-11-07
  • 1970-01-01
  • 2013-09-15
  • 2014-06-08
相关资源
最近更新 更多