我的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
请注意安装了正确的版本,但是=>道具=>版本说4.1.1.2
答案 0 :(得分:28)
编辑:仅当使用.NET 框架时,才会发生这种情况。在.NET Core / Standard领域中,最新的System.Net.Http
程序集版本似乎始终为4.1.2.0-没有可用的4.2.0.0版本。
与System.Net.Http有关的问题是方式,然后此处的答案似乎意味着...
System.Net.Http
NuGet软件包,但没有,它将不安装同一程序集的最新版本(它包含{{1}的4.1.1.2版}程序集,而不是4.2.0.0)。System.Net.Http
(版本4.5.0适用于我)。TL; DR:
如果要确保它使用的是System.Buffers
4.2.0.0程序集,请为项目添加System.Buffers
4.5.0+ NuGet参考。
参考文献:
答案 1 :(得分:8)
在经历了这里介绍的所有解决方案和this answer中引用的参考文献之后,我终于彻底解决了这个问题。我认为这是遇到此问题的任何人都应该做的:
System.Net.Http
的引用(对于使用 PackageReference 的项目,您应该在解决方案资源管理器中的引用旁边看到NuGet符号)。 。如果您确定项目需要System.Net.Http
(请尝试在不使用它的情况下进行构建),则用相应的NuGet软件包替换已删除的System.Net.Http
引用。对于使用 packages.config 的项目,请格外小心,以确保需要引用System.Net.Http
并且它们也使用NuGet。无论如何,通过NuGet删除并重新添加System.Net.Http
(对于引用它的 all 项目),即使已经使用NuGet进行了引用。我发现第2步可能会导致某些地方脱节。如果以后发现在某个地方添加引用后由于清单不匹配而导致运行时异常(甚至在单元测试期间),请从相关的网站项目中删除所有绑定重定向,然后重新添加建议的按照步骤6发出警告。
我花了很多时间试图有条不紊地解决这个问题,所以我相信上述步骤将完全解决大多数人的问题,尽管在特殊情况下可能需要一些横向思考。让我知道这是否对您有用(或不起作用)。
答案 2 :(得分:7)
当你引用框架System.Net.Http时会发生这种情况,但是你的一个包引用需要NuGet包System.Net.Http。
查看您是否有对该程序集的引用,将其删除并安装NuGet包
答案 3 :(得分:4)
您可以强制安装您正在安装的版本,这样您就可以让两个项目保持一致或在输出窗口中找到一条消息,这将告诉您哪些错误或您的依赖项是什么。 由于official link没有列出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
修改强>
Apparently you are not the first to experience this。 答案here怎么样? 基本上,您可以对齐两个项目配置文件的这一部分:
<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>
您可能需要调整令牌值。 为了以防万一,您可以粘贴两个项目的配置文件=
答案 4 :(得分:2)
对此有一个新的解决方案,该解决方案将于2018年10月9日生效。
System.Net.Http
的所有引用更新为最新版本4.3.4。 如果您的项目具有新的项目结构,请对其进行编辑并确保其包含以下软件包参考:
<PackageReference Include="System.Net.Http" Version="4.3.4" />
搜索您的解决方案并删除System.Net.Http的所有现有绑定重定向,它们将如下所示
<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>
重建,警告现在应该消失了,您的代码应该可以正常构建并运行
答案 5 :(得分:1)
Neo上面发布的6个步骤帮助我解决了ASP.NET包问题!谢谢Neo!我已经处理了一个多星期。
我只想分享我在实施Neo上面的帖子时的个人笔记。
我有一个针对.Net Framework 4.6.1的ASP.NET Web API项目
这是我所做的:
<PropertyGroup> <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences> </PropertyGroup>
答案 6 :(得分:1)
我现在在使用Azure Worker角色时遇到过两次此问题。对system.net.http的任何简单调用都会导致代码挂起,但是Azure根本没有反馈,因此注释掉代码要花费数小时或数天才能找到原因,更不用说解决方案了。
一个简单的技巧为我修复了它。这不是我的解决方案,大约6个月前我遇到了它,但是当问题今天再次发生在我身上时,我认为值得发布。
答案 7 :(得分:0)
我尝试了各种解决方案(删除了dependentAssembly或也指定了绑定重定向)。他们都没有工作。
但是,唯一对我有用的解决方案是从Visual Studio中将System.Net.Http的“特定版本”(或提供版本问题的任何DLL)显式设置为False。
答案 8 :(得分:0)
只需从不同的项目/类库中删除 system.net.http 引用并重新添加引用即可。
答案 9 :(得分:-2)
我正在使用.NET 4.6.2,发现了相同的问题。我有两个项目,一个网站和一个测试项目。我查看以下内容:
两个项目都已为System.Net.Http安装了NuGet软件包
两个程序中的引用相等,并且都指向相同的
包
问题。项目中的Web.Config和App.Config指向不同的System.NET.Http。
我将两个配置中的代码替换为:
<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>
他们两个都。然后冲突消失了。