关于.net:HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配

关于.net:HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配

HRESULT: 0x80131040: The located assembly's manifest definition does not match the assembly reference

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

通过ncover运行nunit时得到此信息。有什么主意吗?


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

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

此外,如果这是对GAC中的内容的引用,请当心;可能是某处指向错误的版本。确保(通过每个引用的属性)选择了正确的版本或将"特定版本"设置为false。


我最近遇到了这个问题,并在有问题的dll上运行了\\'depends.exe \\'。它告诉我dll是在x86中编译的,而某些依赖项是在x64中编译的。

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


对于wcf rest services项目,我必须在web.config中添加一个运行时部分,其中所请求的dll为:

1
2
3
4
5
6
7
8
9
10
  <runtime>
   
      <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
.
.
.
  <runtime>

通过删除所有运行时部分来解决我的问题

1
2
3
4
5
6
7
8
9
10
11
12
<runtime>
       
            <dependentAssembly>
               
                <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
               
                <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

通常在测试环境的DLL之一的版本与开发环境不匹配时发生。

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


只需删除bin文件夹,然后再次重新创建所有项目,它将立即开始工作。


当通过共享文件夹从其他计算机访问项目文件时,我遇到了类似的问题。就我而言,干净的重建工作无济于事。必须从输出目录中删除bin和objects文件夹。


在我的情况下,我在调试时收到此消息:

1
2
3
4
"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软件包管理器中更新组件更安全。因此,这两个组件具有相同的版本。

重建并且没有问题。


就我而言,这是由于WebGrease导致的。我将其更新为最新版本(使用NuGet),但与依赖项冲突。我在web.config中手动添加了以下代码,它起了很大的作用。

1
2
3
4
<dependentAssembly>
   
    <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>

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


在我的特定情况下,由于在VBScript中完成了CreateObject而得到了此结果。
在我的情况下,原因是GAC中存在的程序集版本比我编译的版本要旧。 (为解决更早的问题,我在GAC中安装了该程序集。)。

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


我在一个Web api项目中遇到了这个问题。

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

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

重建工作正常,但就我而言,我需要一个长期解决方案。

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


我遇到的问题是找不到PayPal程序集,这是因为我将解决方案命名为PayPal。我确定这不会是任何人的答案,但以为我还是会分享它:C#ASP.NET MVC PayPal未找到程序集


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

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

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

别忘了检查您的其他dll!


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


当我更新web.config而不更新所有引用的dll时,这发生在我身上。

使用适当的差异过滤器(当心Meld \\的默认目录比较过滤器,忽略二进制文件),可以识别出差异,复制文件并且一切正常。


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

考虑此解决方案(由larocha提供(感谢您,无论您是谁)):

  • 在文本编辑器中打开C:\\\\\\\\ Program Files \\\\\\\\ Microsoft Visual Studio 9.0 \\\\\\\\\\ Common7 \\\\\\\\ IDE \\\\\\\\ devenv.exe.config
  • 查找以下字符串:" Microsoft.VisualStudio.TemplateWizardInterfac e "
  • 注释掉元素,使其看起来像这样:
  • <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


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

    1
    2
    3
    4
    <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-5.5.13.0" newVersion="5.5.13.0" />
      </dependentAssembly>

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

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

    "Error HRESULT E_FAIL has been returned from a call to a COM
    component."

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


    这里只是另一种情况。第一次在VS2010 / .NET 4下将XML文件反序列化为对象时,我从Managed Debugging Assistant遇到了此错误。在生成后事件(通常是Microsoft风格的东西)中会生成一个包含对象类的DLL。对于同一解决方案中的多个项目,效果非常好,在一个以上的项目中出现问题。错误文字:

    BindingFailure was detected Message: The assembly with display name
    MyProjectName.XmlSerializers' failed to load in the 'LoadFrom' binding
    context of the AppDomain with ID 1. The cause of the failure was:
    System.IO.FileLoadException: Could not load file or assembly
    MyProjectName.XmlSerializers, Version=1.0.0.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)

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

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

    然后将构建项目,但是用于运行或调试代码的所有选项将变为灰色。重新启动VS将无济于事。

    我以git还原了对x86库的引用,以防万一,但是我编译的所有代码都保留了AnyCPU。

    对于Winform应用程序,以下F5或"开始调试"按钮显示为灰色?我卸载并重新加载了开始的项目(这也是最初出现问题的地方)。

    此后,一切恢复原状:程序运行时没有初始错误。

    请参阅http://www.catb.org/jargon/html/R/rain-dance.html,http://www.catb.org/jargon/html/V/voodoo-programming.html或http: //www.catb.org/jargon/html/I/incantation.html及其链接。


    推荐阅读