我需要包含所有System.Collections.Immutable依赖吗?

25

我刚刚从(旧的)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)上,因为它们随着框架一起提供。

我已经在我的项目中有大量的包,并且希望如果可能的话避免由这8个包引起的额外开销(而不会让自己吃亏)。

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

编辑:只是为了完整起见,因为之前有一条评论:这些依赖项是实际的包(而不是命名空间),必须下载它们,我正在针对并编译.NET 4.6,在VS2015中工作。尽管如此,有可能某些东西已经过时,这些包不必正常加载吗?


@Jodrell .NET v4.6,刚将所有内容从v4.5.2迁移过来,并在此过程中注意到了过时的Bcl.Immutable包。 - enzi
我猜你可以省略依赖项,因为4.6版本已经包含了所有这些软件包,版本号为4.0.0或更高。我没有尝试过,所以不太有资格提供答案。 - Jodrell
如果它们已经被引用,请检查您的引用是否比NuGet更新,然后您可以删除额外的引用并在web.config中放置一个程序集重定向,以便系统加载此处描述的更新版本:https://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx#BKMK_Specifyingassemblybindinginconfigurationfiles - Lukos
@Lukos 我实际上没有引用任何列出的DLL(在使用Immutable的项目中)。即使有 - 是否需要进行程序集重定向?由于我目标是.NET 4.6,所有这些DLL都保证存在(至少现在要求是>= 4.0.0)。除此之外,我相信NuGet在解析依赖关系时不考虑app.configs - 是这样吗? - enzi
NuGet不会这样做,但如果Immutable类正在寻找特定的旧版本,则重定向将起作用。我的意思是,允许NuGet将它们全部拉入,然后使用重定向删除您不需要的旧引用,以确保它不会崩溃。 - Lukos
1个回答

26
你只是看到Nuget包需要让许多人满意的副作用。该包支持大量目标,最近正在快速扩散。我看到它支持Xamarin的OSX和iOS,Windows Phone 8.0和8.1,Windows Store,CoreCLR(开源项目),.NET 4.5,MonoTouch for iOS和Android以及.NETCore(Silverlight)。
这些依赖包仅包含“参考程序集”,通常安装在c:\program files x86\reference assemblies目录中的那种程序集。Nuget包不会冒险缺少此类参考程序集,并包含整个套件。
下载完成后,包安装程序运行并添加您实际需要的引用。很容易看到发生了什么,只需打开项目的“引用”节点。如果您的目标是.NET 4.5及更高版本的桌面版,则添加的引用总数为一个,即System.Collections.Immutable。是的,您可以将它们删除。

确实,除了“Immutable”之外,没有添加其他引用。但是我的主要关注点是这些包本身——它们现在在我的“packages.config”中,并且每当我清理包目录时都会被下载(尽管这种情况并不经常发生,但如果我不需要它,我想将其删除)。因此,Hans,请您澄清一下:当您说“您可以将它们删除”时,您是指引用还是“packages.config”中的包? - enzi
packages.config文件和子目录中的条目。 - Hans Passant
随着project.json的出现,情况变得更好了...依赖项不再进入文件中的依赖项。 - gregjhogan
或许值得补充的是,这个问题将在下一个软件包版本中得到修复:"chcosta于2015年11月30日发表评论:已经提交了此问题的修复程序,并将在下一个软件包发布中出现。" - user743382

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接