asp.net 未能加载文件或程序集“System.Net.Http

ruarlubt  于 2022-11-19  发布在  .NET
关注(0)|答案(7)|浏览(452)

In my diagnostic view of my build output shows this conflict
There was a conflict between "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". (TaskId:20) "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not. (TaskId:20) References which depend on "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Net.Http.dll]. (TaskId:20)
I got here by adding the RestSharp nuget package. I was not having an issue until I installed this and I think one of the pieces that came with it may have caused this issue. I tried to uninstall it but that did not work.

pvcm50d1

pvcm50d11#

安装Nuget套件:System.Net.Http版本4.3.3安装正确的版本=4.1.1.2
这将在项目文件中产生以下引用:

<Reference Include="System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll</HintPath>
</Reference>
lpwwtiir

lpwwtiir2#

如果您使用vs 2017,一些项目将强制u引用system .NET.http(4.2.0.0)当您从nuget(版本4.3.3)安装时,您的system .NET.http将是4.1.1.2

  • 〉这将是冲突
    因此,在您的web.config或app.config中,您可以更改为4.1.1.2或4.2.0.0这取决于运行时复制到bin文件夹的版本
<dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.1.1.2" />
      </dependentAssembly>
5m1hhzi4

5m1hhzi43#

我正在使用**.NET Framework 4.7.2Visual Studio 15.5**。当我将System.Net.Http 4.3.3升级到4.3.4时,收到“无法加载”错误:
{“未能加载文件或程序集”System.Net.Http,Version=4.2.0.0,Culture=neutral,PublicKeyToken= b 03 f5 f7 f11 d50 a3 a“或它的某个依赖项。系统找不到指定的文件。":“System.Net.Http,Version=4.2.0.0,Culture=neutral,PublicKeyToken= b 03 f5 f7 f11 d50 a3 a”}
我通过了该步骤,但却得到了 FileNotFoundException
无法加载文件或程序集'System .NET.Http,Version=4.2.0.0,Culture=neutral,PublicKeyToken= b 03 f5 f7 f11 d50 a3 a'或它的某个依赖项。系统找不到指定的文件。
GitHub上的**.NET Core项目中的这个线程讨论了这个问题,我发现GitHub上的.NET Core项目中的这个帖子非常有帮助:
https://github.com/dotnet/corefx/issues/25773#issuecomment-350036434
我的(可怜的)总结:Microsoft正在尝试消除对
System.Net.HttpNuGet包的需要,因为它是解决其他版本问题的一种变通方法。.NET Framework 4.7.1VS 15.5进行了一些更改,这些更改(应该?)完全消除了对System. Net.HttpNuGet包及其关联绑定的需要。
我从我的项目中删除了
System .NET.HttpNuGet包,并添加了对.NET Framework 4.7.2附带的System .NET.Http**的引用,一切都恢复了原样。

cbeh67ev

cbeh67ev4#

从4.6.1框架升级到4.7.2后,我们开始遇到此错误,最终解决方案是转到Web配置文件,找到以下内容:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>

并将其替换为

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>

上面所做的改变就是:新版本=”4.0.0.0“

q5iwbnjs

q5iwbnjs5#

**根本原因:**当您在应用程序中引用某些第三方库时,通常会遇到此类问题。

  • 例如,您将RestSharp的指涉(第三方库)。该RestSharp可能使用了System.Net.Http4.2.0.0版本的引用。并且您的项目也使用了System.Net.Http4.0.0.0的引用(来自GAC)。现在,当您运行应用程序并尝试调用任何使用RestSharp的方法时,同时,Runtime(CLR)会尝试寻找版本为4.2.0.0System.Net.Http组件,如果找不到想要的版本,就会掷回System.IO.FileNotFoundException例外状况,并显示下列错误消息。*

未能加载文件或程序集“System.Net.Http,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或它的某个依赖项。系统找不到指定的文件。
这里可以看到How the Runtime Locates Assemblies

**解决方案:**只需在启动项目的web.configapp.config中添加以下配置。

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

此配置指示运行库在查找0.0.0.04.2.0.0之间的任何版本的System.Net.Http程序集时,仅解析4.0.0.0版本的System.Net.Http程序集。
下面是完整的架构:

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>  
   </runtime>  
</configuration>
yqyhoc1h

yqyhoc1h6#

system.net.http库现在作为.Net标准框架的一部分分发,这可能会导致问题,通常是在将Nuget包更新到较新版本时。
对我有效的解决方案是从Nuget中删除System.Net.Http包(以及依赖于它的格式化程序包),并删除app.config中对system.net.http库的所有引用(它们通常是dependantAssemblies)。
最后,编辑项目文件,从框架中添加对http的引用,如下所示:

5n0oy7gb

5n0oy7gb7#

不太好,但可以使用 bindingRedirect 作为替代解决方案-如果您有-

<startup useLegacyV2RuntimeActivationPolicy="true" >
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" /></startup>

则移除“useLegacyV 2 RuntimeActivationPolicy”属性会有所帮助,因为它不会还原为旧CLR。

相关问题