我将解决方案上的.Net框架从4.5.2
升级到4.8
。我最初收到了一些警告,为了修复它们,我对警告中的所有软件包都进行了Update-Package -Id some.package –reinstall
。
然后它显示了一个通用警告,在查看诊断构建日志后,我看到了以下 4 个警告:
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"和"mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes"之间存在冲突。
和:
"System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"和"System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"之间存在冲突。
和:
"System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"和"System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"之间存在冲突。
最后:
"System.IO,版本=4.1.1.0,区域性=中性,公钥令牌=b03f5f7f11d50a3a"和"System.IO,版本=4.1.2.0,区域性=中性,公钥令牌=b03f5f7f11d50a3a"之间存在冲突。
我在这里和这里看到了解决方案,不幸的是它们没有帮助。
现在,我设法根据这篇文章的建议更改了 *.csproj 文件中的以下内容,从而解决了System.Net.Http
问题:
<Reference Include="System.Net.Http">
<HintPath>..packagesSystem.Net.Http.4.3.4libnet46System.Net.Http.dll</HintPath>
<Private>True</Private>
</Reference>
改为:
<Reference Include="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..packagesSystem.Net.Http.4.3.4libnet46System.Net.Http.dll</HintPath>
<Private>True</Private>
</Reference>
但是,我似乎不知道如何解决System.Runtime
和System.IO
问题。
发现 System.Runtime 和 System.IO 之间的冲突
升级框架版本时,您似乎引用了一些具有更高程序集版本的较旧 nuget 包。
您可以按照我的步骤排查您的问题:
1(卸载您的项目并将其添加到xxx.csproj
文件中
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
之后,重新加载您的项目,清理并重建您的项目。
2(在web.config
文件中添加绑定重定向。
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
它使用生成扩展目录中的 dll,而不是 Nuget 中的 dll。
希望它能帮助你。
我最终安装了Visual Studio 2019,然后更新了每个项目的属性以使用.Net framework 4.8并运行了更新,它就可以工作了。