【发布时间】: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