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

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

在此处输入图像描述 在此处输入图像描述

然后我收到警告:

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

EDIT1:

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版本,我会这样做(解决方案范围内)

 Install-Package System.Net.Http -Version 4.1.1 

或两个项目

 Get-Project ProjectName | Install-Package System.Net.Http -Version 4.1.1 

或者,甚至更好(使用最新版本)

 Install-Package System.Net.Http -Version 4.3.3 

编辑

显然你并不是第一个体验这一点的人 。 这里的答案怎么样? 基本上你可以对齐这两个项目配置文件的这一部分:

          

您可能必须调整令牌值。 为了以防万一,你可以粘贴两个项目的配置文件=

编辑:仅在使用.NET Framework时才会发生这种情况。 在.NET Core / Standard中,最新的System.Net.Http程序集版本似乎总是4.1.2.0 – 没有4.2.0.0版本可用。

关于System.Net.Http的问题是方式,方式更复杂,然后这里的答案似乎暗示……

  1. 是的,有一个System.Net.Http NuGet包,但不,它不会安装相同程序集的最新版本(它包含System.Net.Http程序集的版本4.1.1.2,而不是4.2.0.0)。
  2. 最新的Microsoft Visual Studio(或Microsoft Visual Studio Build Tools)提供版本4.2.0.0,但这并不意味着您的.csproj将始终使用它…
  3. 由于某种原因(我还无法理解),使用4.2.0.0的唯一保证方法是引用使用它的某些NuGet包,例如我们的System.Buffers (版本4.5.0适用于我)。

TL; DR:

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

参考文献:

当你引用框架System.Net.Http时,这往往会发生,但是你的一个包引用需要NuGet包System.Net.Http。

看看你是否有对该程序集的引用,删除它并安装NuGet包

在完成了这里提出的所有解决方案和本答案中引用的参考文献后,我终于彻底解决了这个问题。 我相信任何遇到此问题的人都应该这样做:

  1. 将所有NuGet包更新为最新版。
  2. 根据此处的说明将NuGet从packages.config迁移到PackageReference 。 基本上,对于解决方案中的每个项目,在Solution Explorer中,右键单击References节点或packages.config文件,然后选择Migrate packages.config to PackageReference …. ASP.NET网站项目必须保持使用packages.config
  3. 删除任何不受NuGet管理的System.Net.Http引用(对于使用PackageReference的项目,您应该看到NuGet符号 在此处输入图像描述 在解决方案资源管理器中的引用旁边)。 如果您确定您的项目需要System.Net.Http (尝试在没有它的情况下构建),请将删除的System.Net.Http引用替换为相应的NuGet包。 对于使用packages.config的项目,请特别注意确保需要对System.Net.Http引用,并确保它们也使用NuGet。 无论如何,通过NuGet删除和重新添加System.Net.Http (对于引用它的所有项目)可能会有所帮助,即使已经使用NuGet引用了它。 我发现第2步可能会导致一些不相交的地方。
  4. 由于此处描述的原因,请升级到.NET Framework 4.7.2。 您可以从此处下载或使用Visual Studio Installer for VS 2017。
  5. 从所有app.configWeb.config文件中删除所有程序集绑定,然后构建您的解决方案。 不再需要app.config绑定。 Web.config绑定将在下一步中重新添加,但首先删除它们可确保您的绑定中没有任何过时的版本。
  6. 您现在可能会在此阶段遇到其他一些冲突。 对于ASP.NET网站项目,将绑定重定向添加到警告中提供给您的Web.config中。 对于其他.NET Framework应用程序,对于要获取警告的引用,在要获取警告的项目中添加相应的NuGet包,即使项目在未添加引用的情况下进行编译也是如此。 这会强制项目使用NuGet版本,而不是可能被另一个包引用的本地.NET Framework版本。 这是由于rsenna 上述答案所暗示的.NET Framework和.NET Standard之间的交叉。 构建完成后,您可能需要重复此步骤以进一步参考。

如果您稍后发现由于在某处添加引用后出现明显不匹配而导致运行时exception(即使在unit testing期间),请从相关网站项目中删除所有绑定重定向,然后重新添加警告中给出的建议的重定向每步6。

我花了很多时间试图有条不紊地解决这个问题,所以我相信上面的步骤可以完全解决大多数人的问题,尽管不寻常的情况可能需要一些横向思维。 如果这对您有用(或不起作用),请告诉我。

有一个新的解决方案,到2018年10月9日工作。

  1. 您需要将对System.Net.Http所有引用更新到最新版本4.3.4。
  2. 您应该将软件包安装到导致冲突的.Net框架解决方案中,即使它没有明确要求软件包。
  3. 如果您的项目具有新的项目结构,请对其进行编辑并确保其包含以下包参考:

      
  4. 搜索您的解决方案并删除System.Net.Http的任何现有绑定重定向,它们将如下所示

  5. 重建,警告现在应该消失,你的代码应该构建并运行正常