无法加载文件或程序集System.Net.Http.Primitives。 位于程序集的清单定义与程序集引用不匹配
我正在开发一个使用Google API的程序。 但是每次运行我的程序时,都会收到以下错误信息:
无法加载文件或程序集“System.Net.Http.Primitives,Version = 1.5.0.0,Culture = neutral,PublicKeyToken = b03f5f711d50a3a”或其某个依赖项。 定位的程序集清单定义与程序集引用不匹配。
我正在使用Visual Studio 2012 express。 我尝试过这个链接,并通过许多论坛,但似乎没有工作。 主要问题似乎来自我引用的DLL文件“Google.Apis.dll”,它引用了System.Net.Http.Primitives v1.5.0.0。 但是我的程序引用的版本是2.2.13.0。 我已经尝试了程序参考v1.5.0.0而不是(我设法finddll连同Google.Apis的源代码),但是这只会导致另一个问题,我需要一个更新的System.Net版本。 Http.Primitives。
我一直在试图find一种方法来解决这个问题,但是我似乎无法find任何可行的方法。 谢谢你的时间。
我遇到了与Google API相同的问题。 这里的主要问题是,如果您安装了Microsoft Http Client Libraries,它会在您的项目中放入System.Net.Http.Primitives DLL的更新版本。 web.config假定您仍然使用默认版本1.5。 有两件事情需要解决:
首先:更新到最新版本的Google API和Microsoft Http客户端库 。 你可以通过NuGet安装更新。 右键单击您的网站,点击“pipe理NuGet包”,select左侧的更新。 在这篇文章的时候,一些Google API只是预发行。 您可以通过select更新屏幕左上方的“包括预发行”来通过NuGet安装它们。
第二次更新/将一个dependentAssembly添加到您的web.config。 为此,您需要知道已安装的System.Net.HTTP.Primitives.dll的版本。 在Windows资源pipe理器中查找您的bin目录。 findSystem.Net.HTTP.Primitives.dll,右键单击它,select属性,然后单击“详细信息”选项卡。 注意那里的版本。 在这个职位的时候,我的是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>
对我而言,只需安装Nuget的“Microsoft Http Client Libraries”即可。
添加以下到您的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>
我有类似的问题。
尝试更新nuget(工具/扩展和更新…)为我解决了这个问题和其他一些问题。
/乔纳斯
我们遇到类似的问题。 但在我的情况下,保罗修改app.config的解决scheme没有工作。 原因是我在另一个应用程序中使用它作为插件。 所以它认为应用程序的configuration文件。 所以我们从GitHub获得了Google api代码,并且在移除了System.Net.Http.Primitives的依赖关系之后构build了Google.Apis.Core库。 然后我们使用该DLL解决了我们的问题。
对我来说,它的工作如下:
在Visual Studio(2012)>工具> Nuget程序包pipe理器>程序包pipe理器控制台。 在包pipe理器控制台之上,我有Package Source:nuget.org默认项目:需要System.Net.Http.Primitives的项目在项目文件(yourproject.csproj)中看着一个编辑器,我读了需要哪个版本我的情况是Microsoft.Net.Http.2.2.28)
所以我去了https://www.nuget.org/packages/Microsoft.Net.Http/ ,在“版本历史logging”中点击我的版本(如果没有看到,请滚动一下页面)。 select版本后,您复制build议的命令 – 在我的情况是这样的:
安装程序包Microsoft.Net.Http – 版本2.2.28
但是如果你需要最新版本就是这样的:
安装包Microsoft.Net.Http
并将其粘贴到之前打开的Visual Studio包pipe理器控制台上,如前所述。 执行命令。
在引用的项目中,System.Net.Http.Primitives现在被更新。
上面的关于assemblybinding的答案是正确的,但是你不应该碰到machine.config。
assemblybinding必须在您的项目的所有EXECUTABLE程序集(.exe.config)的引用您的库的configuration文件中设置,而不是在库程序集(.dll.config)
不知何故,保罗·莱姆克(Paul Lemke)的stream行答案并不适合我。 该项目是一个以.net v 2.0开始的webforms应用程序,并已升级到.net版本4.5
我更新了包和nuget创build了正确的dependentAssembly / bindingRedirects。
根据一些评论,这可能不是最好的想法来改变你的本地machine.config文件。
Apprently我在我的web.config文件中有一个属性,导致应用程序忽略bindingRedirects。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
我删除了xmlns属性,它开始工作。
能够很容易地解决这个问题。 刚刚打开了Nuget Package Manager并更新了Microsoft ASP.NET Web API 2.2客户端库包。 这更新了Microsoft.Net.Http到最新版本,解决了System.Net.Http.Primitives程序集的问题。 希望这可以帮助!
当我发布使用Google.Apis.Drive.v2(v1.9.2.1860)的代码给我工作的公司时,我遇到了这个问题。 我给他们的exe和所有的Visual Studio(和NuGet)生成的DLL,他们得到了错误。 我从来没有得到错误。
修复很简单(一旦我find了答案):当从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的“第二”修复,但它是由包pipe理器自动生成的。 对我来说,问题是当我通过更新到Google.Apis.Auth和Google.Apis.Core(v1.9.3)来尝试他的“第一次”修复时,情况变得更糟。 我会得到相同的错误,除了现在是“Google.Apis.Core”是错误的版本(尽pipe可能通过包含相同的.exe.config文件也可能已经解决了)。
希望这有助于某人,我知道这个线程是相当古老的,但它是一个快速的谷歌search引导我。
编辑:忘了提及,这是针对.NET 4.5的控制台应用程序相关的。 其中一些可能仍然与其他.NET目标或ASP.NET有关,但我不确定。 你的旅费可能会改变。
在我的情况下,我是从一个类库引用NuGet包。 NuGet没有通知我们,类库的app.config完全被忽略,我们必须手动将其内容复制到.exe的app.config。
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/
我在TFS 2017的PowerShell脚本中遇到类似的问题。脚本调用.NET代码来在构build过程中执行自定义操作。 我不断收到有关DLL版本冲突的错误。
我无法解决这个问题,直到我根据这个答案在AppDomain AssemblyResolve事件中实现一个钩子: 使绑定redirect适用于Office加载项
这个解决scheme迫使该进程使用当前path中的dll。 我知道这是一个黑客,但我读过,当运行PowerShell,你不能总是使用绑定redirect,这是我原来虽然我可以尝试: https : //github.com/google/google-api-dotnet -client /问题/ 555
在我的情况下,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文件。
要在machine.config中find“runtime”的标签,用web.config(我刚刚列出的标签)中的标签replace或添加(如果没有这样的标签)。