【发布时间】:2020-06-25 00:16:43
【问题描述】:
我有一个非常简单的 .NET Framework 4.7.2 应用程序,其中包含以下 nugets:
<packages>
<package id="Autofac" version="5.1.2" targetFramework="net472" />
<package id="DynamicData" version="6.14.8" targetFramework="net472" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="1.1.0" targetFramework="net472" />
<package id="MSBuildTasks" version="1.5.0.235" targetFramework="net472" developmentDependency="true" />
<package id="ReactiveUI" version="11.2.3" targetFramework="net472" />
<package id="Serilog" version="2.9.0" targetFramework="net472" />
<package id="Serilog.Enrichers.Process" version="2.0.1" targetFramework="net472" />
<package id="Serilog.Enrichers.Thread" version="3.1.0" targetFramework="net472" />
<package id="Serilog.Sinks.File" version="4.1.0" targetFramework="net472" />
<package id="Splat" version="9.3.11" targetFramework="net472" />
<package id="System.Reactive" version="4.3.2" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
</packages>
如您所见,4.5.3 版本中引用了System.Threading.Tasks.Extensions(我无法更改此版本,因为其他包都依赖它)。
当我在 Visual Studio 解决方案资源管理器中转到此 DLL 引用的属性时,它显示从 .....\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll 引用的版本 4.2.0.1。
app.config 中自动生成绑定重定向:
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
当我运行应用程序时,我得到了异常:
我已经尝试将绑定重定向更改为:
<bindingRedirect oldVersion="0.0.0.0-99.99.99.99" newVersion="4.5.3" />
但问题仍然存在。我不知道如何解决这个 dll-hell。任何帮助将不胜感激。
【问题讨论】:
-
发现故障根本原因的最佳方法是启用融合日志。我认为“或其依赖项之一”是这里的关键短语,您可以通过检查融合日志来查看实际丢失的文件:docs.microsoft.com/en-us/dotnet/framework/tools/…
-
我试图安装这个包,
System.Runtime.CompilerServices.Unsafe的默认版本是4.5.2而不是4.7.0!! -
在查看 4.5.2 版本的程序集时,我看到了一个有趣的程序集参考:
.assembly extern System.Runtime.CompilerServices.Unsafe -
packages.config中的版本号是 NuGet 包版本,并且不(必然)与其中的 DLL 的程序集版本相关联。您是否尝试过完全删除<dependentAssembly>节点? -
除了使用 packages.config 文件,您还可以尝试切换到 PackageReference,这可能有帮助,也可能没有帮助,但这是新标准:docs.microsoft.com/en-us/nuget/consume-packages/…
标签: c# visual-studio nuget visual-studio-2019