找到的程序集的清单定义与程序集引用不匹配
通过ncover运行nunit时得到此信息。任何想法?
找到的程序集的清单定义与程序集引用不匹配
通过ncover运行nunit时得到此信息。任何想法?
Answers:
我最近遇到了这个问题,并在有问题的dll上运行了“ depends.exe”。它告诉我dll是在x86中编译的,而某些依赖项是在x64中编译的。
如果仍然有麻烦,我建议您使用depends.exe。
对于wcf rest services项目,我必须在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>
通过删除所有运行时部分解决了我的问题
<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>
当测试环境的DLL之一的版本与开发环境不匹配时,通常会发生这种情况。
清理并构建您的解决方案,并将所有DLL带到发生错误的环境中,该错误应予以解决。
通过共享文件夹从其他计算机访问项目文件时,我遇到了类似的问题。就我而言,清理+重新构建没有帮助。不得不从输出目录中删除bin和objects文件夹。
就我而言,我在调试时收到此消息:
"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(一个带有version 105.2.3.0
,另一个带有version 106.2.1.0
)。
解
要么将其中一个组件升级到较新的版本,要么将另一个组件降级。就我而言106.2.1.0
,105.2.3.0
与NuGet程序包管理器中的组件相比,将其降级到更新并比较安全。因此,两个组件具有相同的版本。
重建,它没有任何问题。
就我而言,这是因为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中更改版本。
在我的特定情况下,由于 CreateObject
在VBScript中完成操作。在我的情况下,原因是GAC中存在的程序集版本比我编译的版本要旧。(为解决更早的问题,我在GAC中安装了该程序集)。
因此,如果您正在使用COM可见类,则在向RegASM注册新程序集之前,请确保从GAC中删除程序集的旧版本。
我在一个Web api项目中遇到了这个问题。
Api项目正在使用版本3的库的nuget包。其中一个引用的程序集说X正在使用版本2的同一nuget包的旧版本。
每当构建引用的程序集或重建引用X的任何其他项目时,api项目的程序集都会使用较低版本进行更新。并得到此程序集引用错误。
重建工作正常,但就我而言,我需要长期解决方案。
我使程序集引用了相同版本的nuget包。
我遇到的问题是找不到PayPal程序集,这是因为我将解决方案命名为PayPal。我确定这不会是任何人的答案,但我认为无论如何我都会分享它:C#ASP.NET MVC PayPal未找到程序集
如果在尝试向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>
这里只是另一种情况。第一次在VS2010 / .NET 4下将XML文件反序列化为对象时,我从Managed Debugging Assistant遇到了此错误。在生成后事件(通常是Microsoft风格的东西)中会生成一个包含对象类的DLL。对于同一解决方案中的多个项目,效果非常好,在一个以上的项目中出现问题。错误文字:
检测到BindingFailure消息:显示名称为MyProjectName.XmlSerializers的程序集无法在ID为1的AppDomain的“ LoadFrom”绑定上下文中加载。失败的原因是: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。
对于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及其链接。
当我更新web.config而不更新所有引用的dll时,这发生在我身上。
使用适当的差异过滤器(当心Meld的默认目录比较过滤器忽略二进制文件),可以识别出差异,复制文件,并且一切正常。