找到的程序集的清单定义与程序集引用
不匹配通过ncover运行nunit时获取此信息。有什么想法吗?
答案 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.html,http://www.catb.org/jargon/html/V/voodoo-programming.html或http://www.catb.org/jargon/html/I/incantation.html并在那里进行链接。
答案 18 :(得分:-2)
如果在尝试向Visual Studio添加组件时出现此错误, - Microsoft.VisualStudio.TemplateWizardInterface
- (在尝试安装奇怪的开发工具之后)
考虑这个解决方案(由larocha提供(谢谢,无论你是谁)):
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>