在一个包含52个项目(所有net462)的大型解决方案中,我们的一些依赖项的最新版本现在仅为.NET标准构建.因此,他们依赖于NuGet软件包NETStandard.Library,而这些软件包又拖入很多其他4.3.x版本的System.*软件包,这些软件包通常在.NET Framework本身中.
因此,一些项目引用packages文件夹中的System.*库,而来自.NET Framework的其他参考System.*库.
这会引起众所周知的运行时问题,例如:
Message: System.IO.FileLoadException : Could not load file or assembly ‘.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
进一步了解NETStandard.Library包的依赖关系,了解到我们可以在所有这些包中遇到相同的问题:
> System.Collections.*
> ponentModel.*
> System.Console
> System.Globalization.*
> System.IO.*
> System.Linq.*
> .*
> System.ObjectModel
> System.Reflection.*
> System.Resources.ResourceManager
> System.Runtime.*
> System.Text.*
> System.Threading.*
> System.Xml.*
通常这可以通过在其他项目中安装相同的软件包来解决,但我们在这里处理了很多项目和很多软件包,我不想盲目地将所有这些依赖项添加到所有52个项目中.
这让我想知道是否有人知道从这种情况中恢复的简单方法,并使所有项目从NuGet包文件夹引用正确的包/ DLL,如果他们当前使用.NET Framework内部的.
可以在here找到针对net462和net471的简单VS解决方案来演示该问题