我有一个非常简单的.NET Framework4.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>
正如您所看到的,在版本System.Threading.Tasks.Extensions
中引用了4.5.3
(我不能更改这个版本,因为其他包依赖于它)。
当我转到Visual解决方案资源管理器中这个DLL引用的属性时,它将显示从.....\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll
引用的版本.....\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll
。
在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-地狱。任何帮助都将不胜感激。
发布于 2020-03-12 19:13:19
当我转到Visual解决方案资源管理器中这个DLL引用的属性时,它显示了从xxxxxx引用的4.2.0.1版本
首先,我认为您对DLL version
和the nuget version
有一点误解。
version 4.5.3
只是nuget包System.Threading.Tasks.Extensions
的版本号,而version 4.2.0.1
只是System.Threading.Tasks.Extensions.dll
(存在于nuget pacakge中)号,它们根本不是一个概念,您可以在xxx.csproj
文件中看到这样的dll。
nuget包的一个版本包含针对不同项目框架的多个竞争DLLS,根据nuget机制,它们将自动安装到相应的项目中。
DLL地狱-无法加载文件或程序集System.Threading.Tasks.Extensions
正如您所说的,您有一个名为System.Reactive version 4.3.2
的nuget包,它依赖于项目中的System.Threading.Tasks.Extensions 4.5.3
。你可以看到这个:
从错误日志中可以看出,项目引用的是System.Threading.Tasks.Extensions.dll 4.2.0.0
,它在nuget包System.Threading.Tasks.Extensions 4.5.3
中不存在,应该是System.Threading.Tasks.Extensions.dll 4.2.0.1
。不确定是否更改了版本号或项目的原因。
您可以检查以下步骤:
溶液
1)确保System.Threading.Tasks.Extensions
版本是packages.config
文件中的4.5.3
。
2)确保在xxx.csproj
文件中将dll版本更改为4.2.0.1
3)在重新安装这些包之前,请先安装Tools
-->Nuget Package Manager
->Package Manager Console
,然后在下运行update-Package -reinstall
重新安装软件包
4)创建一个新的框架4.7.2项目,然后引用这些nuget包来测试它是否是由您的项目引起的。
https://stackoverflow.com/questions/60662705
复制相似问题