我正在开发一个使用Google API的程序。但是每次我运行程序时,我都会遇到以下错误:
无法加载文件或程序集'System.Net.Http.Primitives,Version = 1.5.0.0,Culture = neutral,PublicKeyToken = b03f5f711d50a3a'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。
我正在使用Visual Studio 2012 express。我已经尝试过这个link并浏览了很多论坛,但似乎都没有。主要问题似乎来自我引用的DLL文件“Google.Apis.dll”,它引用了System.Net.Http.Primitives v1.5.0.0。但是我的程序引用的版本是2.2.13.0。我尝试使用程序参考v1.5.0.0(我设法找到dll以及Google.Apis的源代码)但是这只引起了另一个问题,我需要一个更新版本的System.Net。 Http.Primitives。
我一直在努力找到解决这个问题的方法,但我似乎找不到任何可行的方法。谢谢你的时间。
答案 0 :(得分:70)
我遇到了与Google API相同的问题。这里的主要问题是,如果您安装 Microsoft Http客户端库,它会在您的项目中添加System.Net.Http.Primitives DLL的更新版本。 web.config假设您仍在使用默认版本1.5。修复它需要做两件事:
首先:更新到最新版本的 Google API 和 Microsoft Http客户端库。您可以通过NuGet安装更新。右键单击您的网站,单击“管理NuGet包”,然后选择左侧的更新。在本文发布时,一些Google API仅是预发行版。您可以通过选择更新屏幕左上角的“include prerelease”来通过NuGet安装它们。
第二次更新/添加dependentAssembly到您的web.config中。为此,您需要知道已安装的System.Net.HTTP.Primitives.dll的版本。查看Windows资源管理器中的bin目录。找到System.Net.HTTP.Primitives.dll,右键单击它,选择属性,然后单击“详细信息”选项卡。请注意那里的版本。在这篇文章发表时,我的 4.0.10.0 。
然后为正确的版本添加/更新dependentAssembly部分。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
答案 1 :(得分:34)
对我来说有用的是简单地安装Nuget的“Microsoft Http Client Libraries”。
答案 2 :(得分:5)
将以下内容添加到您的web.config(app.config):
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.13.0" newVersion="4.2.13.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
答案 3 :(得分:3)
对我而言,它的工作原理如下:
在Visual Studio(2012)上>工具&gt; Nuget包管理器&gt;包管理器控制台。 在包管理器控制台之上我有 包来源:nuget.org 默认项目:需要System.Net.Http.Primitives的项目 使用编辑器在项目文件(yourproject.csproj)中查看我需要阅读哪个版本(在我的例子中是Microsoft.Net.Http.2.2.28)
所以我去了https://www.nuget.org/packages/Microsoft.Net.Http/,然后在“版本历史记录”下点击了我的版本(如果你没有看到,请滚动一下页面)。 选择版本后,您复制建议的命令 - 在我的情况下它是:
Install-Package Microsoft.Net.Http -Version 2.2.28
但如果您需要最新版本就是这样:
安装包Microsoft.Net.Http
然后将其粘贴到先前按我前面所述打开的Visual Studio包管理器控制台上。执行命令。
在引用下的项目中,System.Net.Http.Primitives现已更新。
答案 4 :(得分:2)
我遇到了类似的问题。
尝试更新nuget(工具/扩展和更新......) 为我解决了这个和其他一些问题。
/纳斯
答案 5 :(得分:2)
我们遇到了类似的问题。 但在我的情况下,Paul修改app.config的解决方案不起作用。 原因是我在另一个应用程序中使用它作为插件。所以它考虑了应用程序的配置文件。 因此,我们从GitHub获取了Google api代码,并在删除System.Net.Http.Primitives的依赖关系后构建了Google.Apis.Core库。然后我们用那个解决了我们问题的dll。
答案 6 :(得分:1)
关于程序集的上述答案是正确的,但你不应该触摸machine.config。
必须在项目的所有EXECUTABLE程序集(.exe.config)的配置文件中设置程序集绑定,这些程序集引用您的库,而不是库程序集(.dll.config)
答案 7 :(得分:1)
当我向我工作的公司发布使用Google.Apis.Drive.v2(v1.9.2.1860)的代码时遇到了这个问题。我给了他们exe和Visual Studio(和NuGet)生成的所有DLL,他们得到了错误。我从来没有得到错误。
修复很容易(一旦我弄清楚):从Nuget安装api时,文件'assemblyname.exe.config'会自动生成在输出(又名,Debug或Release)文件夹中。您所要做的就是在运行程序集时将该文件包含在除生成文件夹之外的某个位置。这是我的那个文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这基本上是Paul的“第二次”修复,但它是由包管理器自动生成的。对我来说问题是当我通过更新到Google.Apis.Auth和Google.Apis.Core(v1.9.3)尝试他的“第一次”修复时,它让事情变得更糟。我会得到同样的错误,除非现在是“Google.Apis.Core”是错误的版本(尽管可能也可以通过包含相同的.exe.config文件来解决。)
希望这对某人有所帮助,我知道这个帖子已经很老了,但这是一个快速谷歌搜索引导我的。
编辑:忘记提及,这与针对.NET 4.5的控制台应用程序相关。其中一些可能仍与其他.NET目标或ASP.NET相关,但我不确定。您的里程可能会有所不同。
答案 8 :(得分:0)
不知何故Paul Lemke的热门回答并不适合我。 该项目是一个webforms应用程序,以.net v 2.0开始,已升级到.net 4.5版
我更新了包,nuget创建了正确的dependentAssembly / bindingRedirects。
根据一些评论,更改本地machine.config文件可能不是最佳选择。
显然我的web.config文件中有一个属性导致应用忽略bindingRedirects。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
我删除了那个xmlns属性,它开始工作了。
答案 9 :(得分:0)
能够轻松解决这个问题。刚刚打开Nuget包管理器并更新了Microsoft ASP.NET Web API 2.2 Client Library包。这更新了Microsoft.Net.Http到最新版本,解决了System.Net.Http.Primitives程序集的问题。希望这有帮助!
答案 10 :(得分:0)
在我的例子中,我引用了类库中的NuGet包。 NuGet没有通知我们类库的app.config被完全忽略,我们必须手动将其内容复制到.exe的app.config。
答案 11 :(得分:0)
NuGet在Web.Config中进行了以下更改
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.22.0" newVersion="4.2.22.0" />
</dependentAssembly>
到
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.28.0" newVersion="4.2.28.0" />
</dependentAssembly>
这是在此软件包https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/
的安装和后续删除(通过版本控制还原)之后答案 12 :(得分:0)
我在TFS 2017的PowerShell脚本中遇到了类似的问题。这些脚本称为.NET代码,用于在构建过程中执行自定义操作。我一直在收到关于dll版本冲突的错误。
在根据以下答案实现了对AppDomain AssemblyResolve事件的挂钩之前,我无法解决问题:Making binding redirects work for office add-ins
此解决方案强制进程使用当前路径中的dll。我知道这有点像黑客,但我读过在运行PowerShell时,你不能总是使用绑定重定向,这是我最初可以尝试的:https://github.com/google/google-api-dotnet-client/issues/555
答案 13 :(得分:0)
安装软件包Microsoft.Net.Http-版本2.2.22
此版本具有该dll \ packages \ Microsoft.Net.Http.2.2.22 \ lib \ net45 \ System.Net.Http.Extensions.dll
答案 14 :(得分:-2)
就我而言,Nuget会自动将以下内容添加到web.config
<runtime xmlns="">
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.22.0" newVersion="2.2.22.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.10.0" newVersion="2.1.10.0" />
</dependentAssembly>
</assemblyBinding>
但我仍然收到上述错误消息,最后我弄清楚了。您必须将这些标记复制到位于C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config的 machine.config 文件。
找到&#34;运行时&#34;的标签在machine.config上,替换或添加(如果没有这样的标记)它与您的web.config中的标记(我刚刚在上面列出的那些)。