HRESULT:0x80131040:定位的程序集的清单定义与程序集引用不匹配

时间:2008-09-18 15:58:05

标签: .net nunit ncover

找到的程序集的清单定义与程序集引用

不匹配

通过ncover运行nunit时获取此信息。有什么想法吗?

19 个答案:

答案 0 :(得分:44)

这是程序集之间的不匹配:从程序集引用的DLL没有预期的方法签名。

清理解决方案,重建所有内容,然后重试。

另外,如果这是对GAC中某些内容的引用,请注意;它可能是某个地方的东西指向一个不正确的版本。确保(通过每个引用的属性)选择了正确的版本或将特定版本设置为false。

答案 1 :(得分:9)

我最近遇到了这个问题,我在有问题的dll上运行了'depends.exe'。它向我展示了dll是在x86中编译的,而一些依赖项是在x64中编译的。

如果您仍然遇到麻烦,我建议您使用depends.exe。

答案 2 :(得分:7)

在我的wcf rest服务项目的情况下,我不得不在web.config中添加一个运行时部分,其中有所请求的dll:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
.
.
.
  <runtime>

答案 3 :(得分:6)

当测试环境的某个DLL的版本与开发环境不匹配时,通常会发生这种情况。

清理并构建您的解决方案并将所有DLL带到发生错误的环境中,以便解决问题

答案 4 :(得分:4)

当通过共享文件夹从不同的计算机访问项目文件时,我遇到了类似的问题。在我的情况下,清洁+ reabuild没有帮助。必须从输出目录中删除bin和objects文件夹。

答案 5 :(得分:3)

删除所有运行时部分

解决了我的问题
<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

答案 6 :(得分:3)

在我的情况下,我在调试时得到了这条消息:

"Error while calling service <ServiceName> Could not load file or assembly 'RestSharp, 
Version=105.2.3.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)"

<强>原因

在我的项目中,我有两个使用RestSharp的内部组件,但两个组件都有不同版本的RestSharp(一个版本为105.2.3.0,另一个版本为版本106.2.1.0)。

<强>解决方案

将其中一个组件升级为更新或降级另一个组件。就我而言,从106.2.1.0降级到105.2.3.0而不是更新NuGet包管理器中的组件对我来说更安全。因此两个组件都具有相同的版本。

重建并解决问题。

答案 7 :(得分:2)

在我的特殊情况下,由于在VBScript中完成了CreateObject,我得到了这个。 我的案例中的原因是驻留在GAC中的程序集版本,它比我编译的版本旧。 (试图解决之前的问题,我在GAC中安装了程序集。)

因此,如果您正在使用COM可见类,那么在使用RegASM注册新程序集之前,请确保从GAC中删除旧版本的程序集。

答案 8 :(得分:1)

就我而言,由于WebGrease而发生了这种情况。我将它更新到最新版本(使用NuGet),但它与依赖项冲突。我手动在web.config中添加了以下代码,它可以作为魅力。

<dependentAssembly>
    <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>

请注意我的解决方案仅在错误与WebGrease相关时才有效。错误代码将保持不变。此外,您需要相应地更改oldVersion和newVersion中的版本。

答案 9 :(得分:1)

我在网络API项目中遇到了这个问题。

Api项目正在使用版本为3的库的nuget包。其中一个引用的程序集说X正在使用与版本2相同的nuget包的旧版本。

每当构建引用的程序集或重建引用X的任何其他项目时,api项目的程序集都会以较低的版本进行更新。并得到此程序集引用错误。

重建有效,但就我而言,我想要一个长期的解决方案。

我使程序集引用了相同版本的nuget包。

答案 10 :(得分:1)

刚删除的bin文件夹和项目会重新创建所有内容,现在它正在运行。

答案 11 :(得分:0)

我的WPF项目引用了3个自定义dll。我更新了其中之一,删除了引用,并将引用添加到新的dll中。它还在参考的属性中显示了正确的版本号。它正在重建,没有错误。

但是,当应用程序运行时,发生了“找到的程序集清单..”失败,并提到了旧版本。

在搜索了几个小时的解决方案并读取了几个这样的线程之后,我想起了其他dll。 其他dll之一引用的是旧版本,这就是失败发生的原因。重建第二个dll并在我的WPF项目中重新创建两个引用后,失败消失了。

别忘了检查您的其他dll!

答案 12 :(得分:0)

在Designer中工作时出现此错误。我在VS 2012中进行开发,但在过去的几天中“升级”到了2017年。解决方法是关闭并重新打开VS。

这可能与我在elsewhere中看到的一个错误有关,在该错误中引用管理器不起作用?在这种情况下,尝试在解决方案资源管理器中添加引用时会遇到以下错误消息:

  

“错误HRESULT E_FAIL已从对COM的调用返回   组件。”

我的解决方法是关闭解决方案,在VS2012中重新打开,添加引用,关闭2012,然后重新打开2017。荒谬的是,2017年应该发布了这么明显的错误。

答案 13 :(得分:0)

只需检查您的webconfig文件并删除此代码: -

<dependentAssembly>
    <assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.13.0" newVersion="5.5.13.0" />
  </dependentAssembly>

答案 14 :(得分:0)

当我更新web.config而没有更新所有引用的dll时,发生了这种情况。

使用正确的diff过滤器(提防Meld的默认目录比较过滤器忽略二进制文件),识别出差异,复制文件并且一切正常。

答案 15 :(得分:0)

我只是从项目中删除settings.lic文件并开始工作!

答案 16 :(得分:0)

我遇到了无法找到PayPal程序集的问题,这是因为我已将我的解决方案命名为PayPal。我确信这不会是任何人的答案,但我认为无论如何我会分享它:C# ASP.NET MVC PayPal not finding assembly

答案 17 :(得分:0)

这里只是另一个案例。我在第一次将XML文件反序列化为VS2010 / .NET 4下的对象时,从托管调试助手出现此错误。在构建后的事件(通常的Microsoft样式)中生成包含对象类的DLL。对于同一解决方案中的多个项目工作得很好,在另外一个项目中出现问题时出现问题。错误文字:

  

检测到BindingFailure消息:具有显示名称的程序集   MyProjectName.XmlSerializers'无法加载'LoadFrom'绑定   ID为1的AppDomain的上下文。失败的原因是:   System.IO.FileLoadException:无法加载文件或程序集   MyProjectName.XmlSerializers,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = null'或其依赖项之一。位于   程序集的清单定义与程序集引用不匹配。   (HRESULT异常:0x80131040)

由于这里的一些答案表明平台不匹配,我注意到3个项目和解决方案选择了“混合平台”配置,并且为x86而不是AnyCPU编译了3个项目。我没有特定于平台的代码(尽管一些供应商提供的DLL依赖于一些x86库)。我将所有出现的x86替换为AnyCPU:

for a in $( egrep '(x86|AnyCPU)' */*.csproj *.sln -l  ) ; do echo $a ; sed -i 's/x86/AnyCPU/' $a ; done

然后项目将构建,但运行或调试代码的所有选项都将显示为灰色。重启VS无济于事。

我用git恢复了对x86库的引用,以防万一,但为我编译的所有代码保留了AnyCPU。

关注F5 or Start Debugging Button is Greyed Out for Winform application?我卸载并重新加载了启动项目(它也是最初出现问题的那个项目)。

之后,一切都恢复原状:程序在没有初始错误的情况下运行。

请参阅http://www.catb.org/jargon/html/R/rain-dance.htmlhttp://www.catb.org/jargon/html/V/voodoo-programming.htmlhttp://www.catb.org/jargon/html/I/incantation.html并在那里进行链接。

答案 18 :(得分:-2)

如果在尝试向Visual Studio添加组件时出现此错误, - Microsoft.VisualStudio.TemplateWizardInterface - (在尝试安装奇怪的开发工具之后)

考虑这个解决方案(由larocha提供(谢谢,无论你是谁)):

  1. 在文本编辑器中打开C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ devenv.exe.config
  2. 找到此字符串:“Microsoft.VisualStudio.TemplateWizardInterfac e”
  3. 注释掉该元素,使其如下所示:
  4. <dependentAssembly>
    <!-- assemblyIdentity name="Microsoft.VisualStudio.TemplateWizardInterface" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" / -->
    <bindingRedirect oldVersion="0.0.0.0-8.9.9.9" newVersion="9.0.0.0" />
    </dependentAssembly>

    来源:http://webclientguidance.codeplex.com/workitem/15444