C# 发现System.Net.Http之间存在冲突

C# 发现System.Net.Http之间存在冲突,c#,.net,nuget,service-fabric-stateful,C#,.net,Nuget,Service Fabric Stateful,我的VS解决方案中有几个项目。每当我将“System.Net.Http”NuGet包添加到一个包中时,它就会显示为版本4.2.0.0。然后我做同样的事情,添加相同的NuGet包,但是,另一个说的是版本。4.1.1.2 然后我得到一个警告: 发现System.Net.Http之间存在冲突 编辑1: Gathering dependency information took 1.7 sec Attempting to resolve dependencies for package 'Syste

我的VS解决方案中有几个项目。每当我将“System.Net.Http”NuGet包添加到一个包中时,它就会显示为版本4.2.0.0。然后我做同样的事情,添加相同的NuGet包,但是,另一个说的是版本。4.1.1.2

然后我得到一个警告:

发现System.Net.Http之间存在冲突

编辑1:

Gathering dependency information took 1.7 sec
Attempting to resolve dependencies for package 'System.Net.Http.4.3.3' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'System.Net.Http.4.3.3'
Resolved actions to install package 'System.Net.Http.4.3.3'
Retrieving package 'System.Net.Http 4.3.3' from 'nuget.org'.
Adding package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to 'packages.config'
Successfully installed 'System.Net.Http 4.3.3' to ....Service
Executing nuget actions took 2.05 sec
Time Elapsed: 00:00:03.8937113
请注意安装了正确的版本,但是=>Props=>版本显示为4.1.1.2


您可以强制安装您正在安装的版本,这样您就可以使两个项目保持一致,或者在输出窗口中找到一条消息,告诉您出了什么问题或依赖项是什么。 由于列出了4.2版,我会这样做(解决方案范围)

或者两个项目都有

Get-Project ProjectName | Install-Package System.Net.Http -Version 4.1.1
或者更好(使用最新版本)

编辑

。 答案呢? 基本上,您可以对齐项目配置文件的这一部分:

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

您可能必须调整标记值。
以防万一,您是否可以为两个项目粘贴配置文件=

当您有对framework System.Net.Http的引用时,这通常会发生,但您的一个包引用需要NuGet package System.Net.Http


查看是否有对该程序集的引用,将其删除并安装NuGet软件包,而不是编辑:这仅在使用.NET Framework时发生。在.NET Core/Standard land中,最新的
System.NET.Http
assembly版本似乎总是4.1.2.0—没有可用的4.2.0.0版本

关于System.Net.Http的问题比这里的答案似乎暗示的要复杂得多

  • 是的,有一个
    System.Net.Http
    NuGet软件包,但不是,它将安装同一程序集的最新版本(它包含
    System.Net.Http
    程序集的版本4.1.1.2,而不是4.2.0.0)
  • 最新的Microsoft Visual Studio(或Microsoft Visual Studio生成工具)提供了4.2.0.0版,但这并不意味着您的.csproj将始终使用它
  • 出于某种原因(我还不能理解),使用4.2.0.0的唯一有保证的方法是引用使用它的某些NuGet软件包,例如us
    System.Buffers
    (4.5.0版适合我)
  • TL;博士:

    如果要确保项目使用的是
    System.Net.Http
    4.2.0.0程序集,请向项目添加
    System.Buffers
    4.5.0+NuGet引用

    参考资料:

    • (-断开的链接)

    在浏览了这里介绍的所有解决方案和中引用的参考资料之后,我最终彻底解决了这个问题。我认为任何经历过这一问题的人都应该这样做:

  • 将所有NuGet软件包更新为最新版本
  • 按照说明将NuGet从packages.config迁移到PackageReference。基本上,对于解决方案中的每个项目,在解决方案资源管理器中,右键单击引用节点或packages.config文件,然后选择Migrate packages.config to packagesreference。。。。ASP.NET网站项目必须继续使用packages.config
  • 删除对非NuGet管理的
    System.Net.Http
    的任何引用(对于使用PackageReference的项目,您应该在解决方案资源管理器中的引用旁边看到NuGet符号)。如果确定项目需要
    System.Net.Http
    (请先尝试在不使用它的情况下构建),请使用相应的NuGet包替换删除的
    System.Net.Http
    引用。对于使用packages.config的项目,请特别注意确保需要引用
    System.Net.Http
    ,并且它们也在使用NuGet。不管怎样,通过NuGet删除和重新添加
    System.Net.Http
    (适用于引用它的所有项目),即使已经使用NuGet引用了它。我发现第二步可能会导致某些不相交的地方
  • 出于上述原因,请升级到.NET Framework 4.7.2。这是VS2019的一部分。否则,请从VS 2017下载或使用Visual Studio安装程序
  • 从所有app.configWeb.config文件中删除all程序集绑定,然后构建解决方案app.config不再需要绑定Web.config绑定将在下一步重新添加,但首先删除它们可以确保绑定中没有任何过时的版本
  • 在此阶段,您可能会遇到其他一些冲突。对于ASP.NET网站项目,将绑定重定向添加到警告中提供给您的Web.config。对于其他.NET Framework应用程序,对于要获取警告的引用,请在获取警告的项目中添加相应的NuGet包,即使项目编译时没有添加引用。这将强制项目使用NuGet版本,而不是可能被另一个包引用的本地.NET Framework版本。这是由于.NET框架和.NET标准之间的交叉,正如rsenna的。构建后,可能需要重复此步骤以获取进一步的参考
  • 如果在某处添加引用后发现由于清单不匹配而出现运行时异常(即使在单元测试期间),请从相关网站项目中删除所有绑定重定向,然后按照步骤6重新添加警告中给出的建议重定向


    我花了很多时间试图有条不紊地解决这个问题,因此我相信上述步骤将完全解决大多数人的问题,尽管对于不寻常的情况可能需要一些横向思考。让我知道这对您是否有效。

    有一个新的解决方案,从
    Install-Package System.Net.Http -Version 4.3.3
    
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.2.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    
    <PackageReference Include="System.Net.Http" Version="4.3.4" />
    
    <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>
    
    <PropertyGroup> <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences> </PropertyGroup>
    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
      </dependentAssembly>