huy*_*itw 32 c# nuget visual-studio-2017
在一个包含52个项目(所有net462)的大型解决方案中,我们的一些依赖项的最新版本现在仅针对.NET标准构建.因此,它们依赖于NuGet包NETStandard.Library,而后者又拖入很多其他4.3.x版本的System.*软件包中,这些软件包通常位于.NET Framework本身.
因此,一些项目引用System.*packages文件夹中的System.*库,而其他项目引用.NET Framework中的库.
这导致众所周知的运行时问题,fe:
消息:System.IO.FileLoadException:无法加载文件或程序集'System.Net.Http,Version = 4.1.1.2,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
深入研究NETStandard.Library包的依赖关系,我们可以看到这些包中也存在同样的问题:
通常这是通过在其他项目中安装相同的软件包来解决的,但我们在这里处理了很多项目和很多软件包,我不想盲目地将所有这些依赖项添加到所有52个项目中.
这让我想知道是否有人知道从这种情况中恢复的简单方法,并使所有项目从NuGet包文件夹中引用正确的包/ DLL,如果它们当前使用.NET Framework内部的那个.
可以在此处找到针对net462和net471的简单VS解决方案来演示该问题
Vla*_*ykh 11
在默认项目模板System.Net.Http中,作为参考添加到项目中,而不是作为nuget包.
在您的两个解决方案(4.6.1和4.7.1)中:
Project ClassLibrary依赖于System.Net.Httpnuget包.
Project ConsoleApp1依赖于System.Net.Http.NET Framework的简单引用
因此,该问题与Target Framework版本无关.
要解决此问题,请将相同版本的
System.Net.Httpnuget包添加到所有项目(使用它).
在解决方案资源管理器中右键单击解决方案并选择 Manage NuGet Packages for Solution...
切换到Installed标签
System.Net.Http在列表中查找,选择它.
检查当前状态:
将相同版本的软件包(在您的情况下为4.3.0)安装到ConsoleApp1项目中.
检查结果:
完成.
此外,最好在您的解决方案中整合软件包版本.相反,您可能会在构建期间出现版本冲突.或者,更糟糕的是,运行时错误就像MethodNotFound绑定重定向到另一个版本的依赖项一样.
这里描述了问题的原因System.Net.Http:
破碎的System.Net.Http 4.1.1-4.3.0验尸部分如何防止将来发生这种情况?2.1
结果我们确定了2个有问题的OOB包,它们不是平台本身的叶节点,并且依赖于它们的平台--System.Net.Http和System.IO.Compression.
这意味着同一个System.Net.Http库在.NET Framework中提供,并作为OOB(带外)nuget包.一些nuget包可以引用它的nuget版本.这就是我在一开始就描述的问题.
因此,您不必修复对所有System.*库的引用.只有这两个:System.Net.Http和System.IO.Compression.
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |