无法加载文件或程序集System.Net.Http.Primitives。找到的程序集的清单定义与程序集引用不匹配


68

我正在开发一个使用Google API的程序。但是,每次运行程序时,都会不断出现以下错误:

无法加载文件或程序集'System.Net.Http.Primitives,版本= 1.5.0.0,区域性=中性,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代替(我设法找到dll以及Google.Apis的源代码),但这仅引起了另一个问题,其中我需要更新版本的System.Net。 Http.Primitives。

我一直在尝试解决此问题的方法,但是似乎找不到任何可行的方法。谢谢您的时间。



1
你好!您在哪里可以解决此问题?我也有同样的问题。谢谢!
WhoAmI 2014年

尽管我没有使用Google API,但对于Web API项目却收到了相同的错误消息。重建项目解决了问题。

7
nuget dll地狱的另一个明显案例
Ferran Salguero 2014年

Answers:


71

我遇到了与Google API相同的问题。此处的主要问题是,如果安装了Microsoft Http客户端库,它将在项目中放入System.Net.Http.Primitives DLL的更新版本。web.config假定您仍在使用默认版本1.5。要解决此问题,需要做两件事:

第一:更新到最新版本的Google APIMicrosoft Http客户端库。您可以通过NuGet安装更新。右键单击您的网站,单击“管理NuGet软件包”,然后选择左侧的“更新”。在本文发布时,某些Google API仅为预发布版本。您可以通过选择更新屏幕左上方的“ include prerelease”,通过NuGet安装它们。

第二次更新/向您的web.config中添加一个dependentAssembly。为此,您需要知道已安装的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>

4
+1第一步足以为我解决问题
CodingIntrigue 2014年

3
只是指出Http.Primitives版本是“ 2.2.22.0”,示例代码显示了“ 4.0.10.0”。但这是正确的答案,应该接受
Raphael Isidro 2014年

3
Nuget的要点是不需要Web.Config中的手动程序集绑定。我已经想念旧的Google API。现在,如果我分发包装DLL,我必须以某种方式通知他们对要使用它的任何项目执行您的两个步骤。
DFTR

谢谢!这修复了错误“程序集'MyAssembly'中类型'MyClass'中的方法'MyMethod'没有实现。” 仅当从Google.Apis.Auth.Mvc4.dll中的类型继承时才会出现。我要做的就是将我的app.config中的bindingRedirect复制到我的nunit配置文件中。
David Hogue

用Nuget更新(第一步)也为我解决了这个问题。
必需品,

34

对我有用的是简单地从Nuget安装“ Microsoft Http Client Libraries”。


安装后您使用了什么名称空间?Thx
WhoAmI

4
当我将其专门添加到我的测试项目中时(这是我运行该问题的地方),无论我已经在主项目中引用了该项目,然后又由我的测试项目引用了该事实,这对我来说都是有效的。
keithl8041 2014年

而要做到这一点,我不得不更新nuget.exe在我们的解决方案- seirer.net/blog/2014/5/20/...
jaminto

1
安装软件包Microsoft.Net.Http
Der_Meister

Niether Microsoft.Net.Http或System.Net.Http nuget程序包都包含System.Net.Http.Primitives.dll。不知道他们过去是否这样做。我的搜索继续。

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>

不确定您的oldVersion范围值和newVersion值,我的newVersion值是:2.2.29.0
kstubs 2015年

对我来说是4.2.29,目标是.Net 4.5
S. Baggy

以我为例,创建的vesrion nuget指向4.2.29,但是我在计算机上安装的版本实际上是4.2.13(GAC_MSIL \ System.Net.Http.Primitives)...当我将重定向更改为4.2.13时,它开始工作了!不知道为什么会发生这种情况,但是如果有人尝试了各种解决方法而仍然无法使它起作用,那么值得您咨询一下GAC并查看您实际使用的版本。
eeee 2015年

3

对我来说,它的工作如下:

在Visual Studio(2012)>工具> Nuget程序包管理器>程序包管理器控制台上。在程序包管理器控制台的顶部,我具有程序包源:nuget.org默认项目:需要System.Net.Http.Primitives的项目使用编辑器查看项目文件(yourproject.csproj),我读取了所需的版本(在我的案子是Microsoft.Net.Http.2.2.28)

因此,我去了https://www.nuget.org/packages/Microsoft.Net.Http/,然后单击“版本历史记录”下的版本(如果看不到该页面,请滚动一下页面)。选择版本后,复制建议的命令-在我的情况下是:

安装包Microsoft.Net.Http-版本2.2.28

但是,如果您需要最新版本,则如下所示:

安装包Microsoft.Net.Http

并将其粘贴到以前如我之前所述打开的Visual Studio包管理器控制台中。执行命令。

在引用下的项目中,System.Net.Http.Primitives现在已更新。


2

我有类似的问题。

尝试更新nuget(工具/扩展和更新...)为我解决了这一问题和其他一些问题。

/乔纳斯


2

我们遇到了类似的问题。但就我而言,Paul修改app.config的解决方案不起作用。原因是我将其用作另一个应用程序中的插件。因此,它将考虑该应用程序的配置文件。因此,在删除了System.Net.Http.Primitives的依赖关系之后,我们从GitHub获得了Google api代码并构建了Google.Apis.Core库。然后,我们使用该dll解决了我们的问题。


2

当我向使用的公司发布使用Google.Apis.Drive.v2(v1.9.2.1860)的代码时遇到了这个问题。我给了他们exe和Visual Studio(和NuGet)生成的所有DLL,他们得到了错误。我从来没有得到错误。

修复很容易(一旦我弄清楚了):从Nuget安装api时,将在输出(aka,Debug或Release)文件夹中自动生成文件“ assemblyname.exe.config”。您所要做的就是在运行程序集的位置(而不是生成的文件夹)时包含该文件。这是给我的那个文件的代码:

<?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文件也可以解决该错误。)

希望这对某人有帮助,我知道这个线程已经很老了,但这是Google快速搜索引导我使用的线程。

编辑:忘记提及了,这与针对.NET 4.5的控制台应用程序有关。其中一些可能仍与其他.NET目标或ASP.NET相关,但我不确定。你的旅费可能会改变。


很抱歉撞到这个,但这实际上是我的唯一解决方法。它解释了为什么它将在调试映射/调试模式下而不在已发布的文件夹中运行。有什么办法可以防止这种情况吗?此处显示了大量信息,可让您轻松获取,而普通用户则无法轻松访问。
凯文G

1

上面关于Assemblybinding的答案是正确的,但是您不应该触摸machine.config。

程序集绑定必须在引用您的库的项目的所有EXECUTABLE程序集(.exe.config)的配置文件中设置,而不是在库程序集(.dll.config)中设置


0

不知何故,保罗·莱姆克(Paul Lemke)的流行答案对我不起作用。该项目是一个从.net v 2.0开始并已升级到.net 4.5版的Webforms应用程序。

我更新了软件包,并且nuget创建了正确的dependentAssembly / bindingRedirects。

根据一些评论,更改本地machine.config文件可能不是最佳方法。

显然,我的web.config文件中有一个属性,该属性导致应用程序忽略bindingRedirects。

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

我删除了xmlns属性,它开始工作。


0

能够轻松解决此问题。刚刚打开了Nuget软件包管理器,并更新了Microsoft ASP.NET Web API 2.2客户端库软件包。这将Microsoft.Net.Http更新为最新版本,从而可以定位System.Net.Http.Primitives程序集。希望这可以帮助!


0

就我而言,我是从类库中引用NuGet包的。NuGet无法告知我们类库的app.config被完全忽略,我们必须手动将其内容复制到.exe的app.config。


您在哪里找到图书馆的图书馆app.config?您是否复制了所有内容?
dakab '16

它通常位于项目文件夹的根目录中,并bin\Foo.dll.config在编译期间复制到该目录中。它们是XML格式,因此通常不能随便复制追加。需要对它们进行比较,并分别复制缺失的部分。
DBN

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/


0

我在TFS 2017的PowerShell脚本中遇到了类似的问题。这些名为.NET代码的脚本在构建过程中执行自定义操作。我不断收到有关dll版本冲突的错误。

在按照以下答案实现对AppDomain AssemblyResolve事件的钩子之前,我无法解决该问题:使绑定重定向对Office加载项有效

此解决方案强制进程使用当前路径中的dll。我知道这有点像黑客,但是我读过,运行PowerShell时,不能总是使用绑定重定向,这是我最初可以尝试的方式:https : //github.com/google/google-api-dotnet -客户/问题/ 555


0

安装包Microsoft.Net.Http-版本2.2.22

此版本具有该dll \ packages \ Microsoft.Net.Http.2.2.22 \ lib \ net45 \ System.Net.Http.Extensions.dll


-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>

但是我仍然收到上面的错误消息,最后我弄清楚了。您必须将这些标签复制到machine.config位于C文件:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config中。

要在machine.config上找到“运行时”标签,请使用web.config(我在上面列出的标签)中的标签替换或添加(如果没有这样的标签)。


@ flyhorse1999,大约晚了一年,但是尝试我发布的解决方案。由于需要删除一个属性,我的应用程序未侦听bindingRedirects。
万斯吉特2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.