24

我刚刚从(一个较旧的)Microsoft.Bcl.ImmutableNuGet 包切换到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 中工作。尽管某些东西已经过时并且不必正常加载包,但这完全有可能吗?

4

1 回答 1

25

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

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

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

于 2015-08-24T18:25:26.783 回答