73

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

通过 ncover 运行 nunit 时得到这个。任何想法?

4

21 回答 21

57

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

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

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

于 2008-09-18T19:17:05.340 回答
12

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

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

于 2009-09-10T17:40:41.317 回答
8

In my case for a wcf rest services project I had to add a runtime section to the web.config where there the requested dll was:

  <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>
于 2013-10-08T06:03:32.623 回答
7

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

<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>
于 2015-08-30T05:48:41.180 回答
6

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

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

于 2013-07-30T15:53:39.193 回答
6

只需删除 bin 文件夹,然后项目将重新创建所有内容,它现在就可以工作了。

于 2018-06-08T08:26:44.193 回答
5

I ran into similar problems when accessing the project files from different computers via a shared folder. In my case clean + reabuild did not help. Had to delete the bin and objects folders from the output directory.

于 2013-11-06T18:17:07.557 回答
5

就我而言,我在调试时收到了这条消息:

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

原因

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

解决方案

要么将其中一个组件升级到更新版本,要么将另一个组件降级。就我而言,在 NuGet 包管理器中降级和更新组件对我来说更安全106.2.1.0105.2.3.0所以两个组件具有相同的版本。

重建,它没有问题。

于 2018-02-02T13:19:38.910 回答
3

在我的特殊情况下,我是CreateObject在 VBScript 中完成的。在我的情况下,原因是 GAC 中的程序集版本比我编译的版本旧。(试图解决一个较早的问题,我在 GAC 中安装了程序集)。

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

于 2011-12-04T12:51:01.050 回答
3

就我而言,这是因为 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 中的版本。

于 2014-12-09T11:48:27.560 回答
1

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

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

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

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

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

于 2015-01-13T23:43:46.377 回答
1

我遇到了找不到 PayPal 程序集的问题,这是因为我将解决方案命名为 PayPal。我相信这不会是任何人的答案,但我想我还是会分享它:C# ASP.NET MVC PayPal not find assembly

于 2016-03-02T12:24:42.287 回答
0

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

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

由于这里的一些答案表明平台不匹配,我注意到 3 个项目和解决方案选择了“混合平台”配置,并且 3 个项目是为 x86 而不是 AnyCPU 编译的。我没有特定于平台的代码(尽管一些供应商提供的 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。

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

在那之后,一切都恢复原状:程序可以正常工作,没有最初的错误。

请参阅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/incanation.html和那里的链接。

于 2015-01-29T10:46:27.973 回答
0

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

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

  1. 在文本编辑器中打开 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config
  2. 找到这个字符串:“ Microsoft.VisualStudio.TemplateWizardInterface”
  3. 注释掉该元素,使其看起来像这样:

<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

于 2013-01-16T13:36:11.300 回答
0

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

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

于 2018-02-18T00:12:41.850 回答
0

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

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

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

我的解决方法是关闭解决方案,在 VS2012 中重新打开,添加引用,关闭 2012 并重新打开 2017。可笑的是,2017 应该已经发布了如此明显的错误。

于 2018-09-12T14:42:23.917 回答
0

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

但是当应用程序运行时,出现“定位程序集的清单..”失败,提到旧版本。

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

不要忘记检查您的其他 dll!

于 2020-12-01T15:04:09.717 回答
0

对我来说,问题出在应用程序文件版本中,它是 3.3.1,我正在将新版本构建为 20.0.1,当将版本重置为相同的值时,它可以正常工作。

于 2022-01-25T17:52:55.693 回答
0

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

于 2017-03-10T10:39:00.707 回答
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>
于 2018-05-03T09:42:23.203 回答
0

I tested All the solutions above but didn't work out for me, after consideration all situations found out the problem is somewhere else, it was so awkward.
I have two different branches for the same project on different folders, the problem was from the other branch.
I updated nuget packages (for the mentioned package on error page) on both branches and the problem solved!

于 2021-11-25T06:55:37.463 回答