发现 System.Runtime 和 System.IO 之间存在冲突

Found conflict between System.Runtime as well as System.IO

我将解决方案上的 .Net 框架从 4.5.2 升级到 4.8。我最初收到了一些警告,为了修复它们,我对警告中的所有包进行了 Update-Package -Id some.package –reinstall

然后它显示了一个通用警告,在查看诊断构建日志后,我看到了以下 4 个警告:

There was a conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes".

和:

There was a conflict between "System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

和:

There was a conflict between "System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

最后:

There was a conflict between "System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.IO, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

我已经看到了解决方案 and ,不幸的是它们没有帮助。

现在,我根据 this post 的建议更改了我的 *.csproj 文件中的以下内容,从而成功解决了 System.Net.Http 问题:

    <Reference Include="System.Net.Http">
      <HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.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>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
      <Private>True</Private>
    </Reference>

但是,我似乎不知道如何解决 System.RuntimeSystem.IO 问题。

Found conflict between System.Runtime as well as 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 和 运行,并且它运行正常。