admin管理员组文章数量:1662878
我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误:
System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本= 1.2.0.200,区域性=中性,PublicKeyToken = 764d581291d764f7”或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (HRESULT的异常:0x80131040)**
在x.Foo.FooGO()
在Foo.cs:第123行的x.Foo.Foo2(String groupName_)
在FooTests.cs中的x.Foo.UnitTests.FooTests.TestFoo():行98 **
System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本= 1.2.0.203,区域性=中性,PublicKeyToken = 764d581291d764f7”或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
我查看了自己的参考文献,并且仅参考了Utility version 1.2.0.203
(另一个是旧的)。
关于我如何找出试图引用此DLL文件旧版本的任何建议?
此外,我认为我的硬盘上甚至没有这个旧程序集。 有什么工具可以搜索这个旧版本的程序集吗?
#1楼
我的问题是将源代码复制到新计算机上,而没有移出任何引用的程序集。
我没有解决该错误,因此,我急忙删除了BIN目录。 重建了我的源代码,从此以后一直有效。
#2楼
我只是找到了收到此错误的另一个原因。 我从特定库的所有版本中清除了GAC,并参考与可执行文件一起部署的特定版本来构建我的项目。 运行项目时,出现此异常,正在搜索库的较新版本。
原因是发布者的政策 。 当我从GAC卸载库的版本时,我也忘记了卸载发布者策略程序集,因此,程序加载器没有使用本地部署的程序集,而是在GAC中找到了发布者策略,该策略要求它搜索新版本。
#3楼
我的app.config包含一个
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>
对于npgsql。 以某种方式在用户计算机上,我的app.exe.config丢失了。 我不确定这是一个愚蠢的用户,安装程序出现故障还是淘汰了防病毒软件。 替换文件解决了该问题。
#4楼
以下内容将所有程序集版本重定向到版本3.1.0.0。 我们有一个脚本,该脚本将始终在App.config中更新此引用,因此我们不必再处理此问题。
通过反射,您可以获取程序集publicKeyToken并从.dll文件本身生成此块。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
</dependentAssembly>
</assemblyBinding>
请注意,如果没有XML名称空间属性(xmlns),此功能将无效。
#5楼
我只是遇到了这个问题,问题是我的应用程序调试目录中有.dll的旧副本。 您可能还需要检查那里(而不是GAC)以查看是否看到它。
#6楼
对我来说,“ Local.testtesttings”文件中的代码覆盖率配置“引起”了问题。 我忘了更新那里引用的文件。
#7楼
其他答案对我不起作用。 如果您不关心版本,而只是想运行您的应用程序,则右键单击引用并将“特定版本”设置为false ...这对我有用。
#8楼
我想补充一下,我正在创建一个基本的ASP.NET MVC 4项目,并通过NuGet添加了DotNetOpenAuth.AspNet。 在我为Microsoft.Web.WebPages.OAuth引用了不匹配的DLL文件之后,这导致了相同的错误。
为了解决这个问题,我做了一个Update-Package
并清理了解决方案以进行全面重建。
那对我有用,是一种懒惰的方式,但是时间就是金钱:-P
#9楼
我只是自己遇到了这个问题,而我发现这个问题与其他人遇到的问题有所不同。
我的主项目引用了两个DLL:CompanyClasses.dll和CompanyControls.dll。 我收到运行时错误消息:
无法加载文件或程序集'CompanyClasses,Version = 1.4.1.0,Culture = neutral,PublicKeyToken = 045746ba8544160c'或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配
麻烦的是,我的系统上没有任何版本为1.4.1的CompanyClasses.dll文件。 GAC中没有,应用程序文件夹中没有...在任何地方都没有。 我搜索了整个硬盘。 我拥有的所有CompanyClasses.dll文件均为1.4.2。
我发现真正的问题是CompanyControls.dll引用了CompanyClasses.dll的1.4.1版本。 我只是重新编译了CompanyControls.dll(在引用了CompanyClasses.dll 1.4.2之后),这个错误对我来说已经消失了。
#10楼
对于我们来说,问题是由其他原因引起的。 DevExpress组件的许可证文件包括两行,一个用于未安装在此特定计算机上的旧版本组件。 从许可证文件中删除较旧的版本可以解决此问题。
令人讨厌的部分是,错误消息没有指出导致问题的引用。
#11楼
在AssemblyInfo.cs文件中的AssemblyVersion中,使用固定的版本号而不是指定*。 *将更改每次编译的版本号。 在我的情况下,这就是此异常的问题。
#12楼
.NET程序集加载器:
- 找不到1.2.0.203
- 但确实找到了1.2.0.200
该程序集与请求的程序集不匹配,因此出现此错误。
简而言之,它找不到所引用的程序集。 通过将其放在GAC或应用程序路径中,确保可以找到正确的程序集。 另请参阅http://blogs.msdn/junfeng/archive/2004/03/25/95826.aspx 。
#13楼
您可以做几件事来解决此问题。 首先,使用Windows文件搜索在硬盘驱动器中搜索程序集(.dll)。 获得结果列表后,请执行View-> Choose Details ...,然后检查“ File Version”。 这将在结果列表中显示版本号,因此您可以看到旧版本可能来自何处。
另外,就像Lars所说的那样,检查您的GAC以查看那里列出了什么版本。 Microsoft的这篇文章指出,在构建过程中不会在本地复制在GAC中找到的程序集,因此您可能需要先删除旧版本,然后再进行全部重建。 (有关创建批处理文件的注释,请参阅我对这个问题的回答)
如果仍然无法确定旧版本的来源,则可以使用Visual Studio附带的fuslogvw.exe应用程序来获取有关绑定失败的更多信息。 Microsoft 在此处提供了有关此工具的信息 。 请注意,您必须通过将HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Fusion\\EnableLog
注册表项设置为1来启用日志记录。
#14楼
我添加了一个NuGet包,只是意识到我的应用程序的黑盒部分是在引用该库的旧版本。
我删除了该程序包,并引用了旧版本的静态DLL文件,但从未从以下位置更新过web.config文件:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
卸载软件包时应恢复为的状态:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
#15楼
从文件夹位置手动删除旧程序集,然后将引用添加到新程序集可能会有所帮助。
#16楼
就我而言,问题出在椅子和键盘之间:-)
Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)
两个或多个不同的程序集希望使用不同版本的DotNetOpenAuth库,这不会有问题。 此外,在我的本地计算机上,NuGet自动更新了一个web.config:
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
然后我意识到我忘了将新的web.config复制/部署到生产服务器。 因此,如果您具有手动部署web.config的方式,请检查它是否已更新。 如果生产服务器的web.config完全不同,则必须在使用NuGet之后同步合并这些dependentAssembly部分。
#17楼
我遇到了同样的错误...就我而言,它如下解决:
- 刚安装应用程序时,这里的人们在应用程序中使用了Microsoft Enterprise Library 4.1。
- 在前一周,我的机器被格式化了,而今天之后,当我构建该应用程序时,它给了我一个错误,即企业库程序集丢失了。
- 然后,我安装了Microsoft Enterprise Library 5.0,该产品是我在Google上获得的第一个搜索条目。
- 然后,当我构建应用程序时,它给了我上面的错误,即所定位的程序集的清单定义与程序集引用不匹配。
- 经过大量搜索和分析,我发现应用程序引用了4.1.0.0,而bin文件夹中的DLL是版本5.0.0.0。
- 然后我要做的是安装了Microsoft Enterprise Library 4.1。
- 删除了以前的参考(5.0)并添加了4.0参考。
- 构建了应用程序,瞧……它起作用了。
#18楼
在Team Foundation Server的构建服务上构建时出现此错误。 事实证明,我的解决方案中有多个项目使用的是NuGet添加的同一个库的不同版本。 我使用NuGet删除了所有旧版本,并添加了新版本作为所有参考。
Team Foundation Server将所有DLL文件放在一个目录中,当然一次只能有一个同名的DLL文件。
#19楼
如果您使用的是Visual Studio,请尝试“清除解决方案”,然后重新生成您的项目。
#20楼
如果尝试使用反射后期绑定,绑定的程序集具有强名称或更改了其公钥令牌,则会引发完全相同的错误。 即使实际上没有找到具有指定公钥令牌的程序集,该错误也是相同的。
您需要添加正确的公共密钥令牌(可以在dll上使用sn -T来获取它)来解决该错误。 希望这可以帮助。
#21楼
我的情况与内森·贝德福德(Nathan Bedford)的职位非常相似,但略有不同。 我的项目也以两种方式引用了更改后的dll。 1)直接和2)通过引用本身具有对更改后的dll的引用的组件(类库)来间接实现。 现在,我的component(2)的Visual Studio项目引用了更改后的dll的正确版本。 但是,组件本身的版本号未更改。 结果,安装新版本的项目无法替换客户端计算机上的该组件。
最终结果:直接引用(1)和间接引用(2)指向客户端计算机上已更改dll的不同版本。 在我的开发机器上,它运行良好。
解决方法:删除应用程序; 从应用程序文件夹中删除所有DLLS; 重新安装,就像我的情况一样简单。
#22楼
在我的情况下,它是C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\〜\\ Temporary ASP.NET Files \\目录中的DLL的旧版本。 您可以删除或替换旧版本,也可以删除并将引用添加回项目中。 基本上,任何一种方法都会创建一个指向临时ASP.NET文件的新指针。
#23楼
就我而言,此错误是在运行ASP.NET应用程序时发生的。 解决方案是:
- 删除项目文件夹中的
obj
和bin
文件夹
清理不起作用,重建不起作用,所有引用都很好,但是它不是在编写其中一个库。 删除这些目录后,一切正常。
#24楼
这是我解决此问题的方法。
- 从异常消息中,获取“问题”库的名称和“预期”版本号。
- 在您的解决方案中找到该.dll的所有副本 ,右键单击它们,然后检查它是哪个版本的.dll。
好的,因此在此示例中,我的.dll绝对是2.0.5022.0(因此Exception版本号错误)。
- 搜索解决方案中所有.csproj文件中“异常”消息中显示的版本号。 将此版本号替换为dll中的实际编号。
因此,在此示例中,我将替换它...
<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
... 有了这个...
<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
任务完成 !
#25楼
只需删除项目的bin文件夹中的内容并重建解决方案即可解决我的问题。
#26楼
清理并重建解决方案可能不会替换输出目录中的所有dll。
我的建议是尝试将文件夹从“ bin”重命名为“ oldbin”或将“ obj”重命名为“ oldobj”
然后尝试重新建立您的解决方案。
如果您使用的是第三方dll,则在成功构建后需要将其复制到新创建的“ bin”或“ obj”文件夹中。
希望这对您有用。
#27楼
如果您遇到类似“ 所定位的程序集的清单定义与程序集引用不匹配 ” 之类的错误,并且如果您已通过VS中的“项目”>“管理NuGet程序包和更新”选项卡进行了更新 ,那么您可以做的第一件事就是尝试安装另一个版本的从NuGet Gallery页面检查版本并从Package Manager控制台运行以下命令后,请执行以下操作:
PM> Install-Package YourPackageName -Version YourVersionNumber
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0
尽管答案与所讨论的软件包没有直接关系,并且已经被问到了答案,但它是通用的,仍然很相关,希望对您有所帮助。
#28楼
我现在要打动大家。 。 。
从您的.config文件中删除所有<assemblyBinding>
引用,然后从NuGet软件包管理器控制台中运行以下命令:
Get-Project -All | Add-BindingRedirect
#29楼
由于引用了与我正在构建的程序集同名的程序集,因此我收到此错误消息。
编译后,但是使用当前项目程序集覆盖了引用的程序集-从而导致错误。
要修复它,我更改了项目的名称,并通过右键单击项目并选择“属性”来使用装配属性。
#30楼
我会让别人从我的愚蠢行为中受益。 我对一个完全独立的应用程序有一些依赖性(我们将此称为App1)。 该App1中的dll被拉到我的新应用程序(App2)中。 每当我在APP1中进行更新时,我都必须创建新的dll并将其复制到App2中。 好。 。 我厌倦了在2个不同的App1版本之间进行复制和粘贴的操作,因此我只是在dll的前缀中添加了“ NEW_”前缀。
好。 。 。 我猜想构建过程会扫描/ bin文件夹,并且当它错误地匹配某些内容时,它会发出与上述相同的错误消息。 我删除了“ new_”版本,但它的构建只是花花公子。
版权声明:本文标题:找到的程序集的清单定义与程序集引用不匹配 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729969159a1217963.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论