C# 定位的组件';的清单定义与程序集引用不匹配
我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误: System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.200,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)** 在x.Foo.FooGO()上 在Foo.cs中的x.Foo.Foo2(字符串groupName_)处:第123行 在FooTests.cs中的x.Foo.UnitTests.FooTests.TestFoo()处:第98行** System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.203,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100) 我查看了我的参考资料,我只参考了C# 定位的组件';的清单定义与程序集引用不匹配,c#,reference,compiler-errors,dependencies,version,C#,Reference,Compiler Errors,Dependencies,Version,我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误: System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.200,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)** 在x.Foo.FooGO()上 在Foo.cs中的x.Foo.Foo2(字符串gr
实用程序版本1.2.0.203
(另一个是旧版本)
关于如何找出引用此DLL文件的旧版本的内容,有什么建议吗
此外,我甚至不认为我的硬盘上有这个旧组件。
是否有任何工具可以搜索此旧版本的程序集?.NET程序集加载器:
- 找不到1.2.0.203
- 但是找到了1.2.0.200
简单地说,它找不到被引用的程序集。通过将程序集放在GAC或应用程序路径中,确保它可以找到正确的程序集。另请参见。您可以做一些事情来解决此问题。首先,使用Windows文件搜索在硬盘上搜索程序集(.dll)。有了结果列表后,请查看->选择详细信息。。。然后检查“文件版本”。这将在结果列表中显示版本号,以便您可以看到旧版本可能来自何处 另外,就像Lars说的,检查你的GAC,看看那里列出了什么版本。声明在GAC中找到的程序集在生成期间不会在本地复制,因此您可能需要在执行“全部重建”之前删除旧版本。(有关为您创建批处理文件的注意事项,请参见我对的回答)
如果仍然无法确定旧版本的来源,可以使用Visual Studio附带的fuslogvw.exe应用程序获取有关绑定失败的更多信息。Microsoft有关于此工具的信息。请注意,您必须通过将
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog
注册表项设置为1来启用日志记录。我刚刚遇到这个问题,问题是我的应用程序调试目录中有一个旧的.dll副本。您可能还想在那里(而不是GAC)查看是否看到它。我自己也遇到了这个问题,我发现这个问题与其他人遇到的问题有所不同
我的主要项目引用了两个dll:companycasses.dll和CompanyControls.dll。我收到一个运行时错误,它说:
无法加载文件或程序集
'公司等级,版本=1.4.1.0,
文化=中立,
PublicKeyToken=045746ba8544160c'或
它的一个依赖项。位于
程序集的清单定义不正确
与程序集引用不匹配
问题是,我的系统上没有任何版本号为1.4.1的CompanyClasses.dll文件。GAC中没有,应用程序文件夹中没有…任何地方都没有。我搜索了我的整个硬盘。我所有的CompanyClasses.dll文件都是1.4.2
我发现真正的问题是CompanyControls.dll引用了companycasses.dll的1.4.1版本。我刚刚重新编译了CompanyControls.dll(在引用companycasses.dll 1.4.2之后),这个错误对我来说消失了。对我们来说,这个问题是由其他原因引起的。DevExpress组件的许可证文件包括两行,一行用于未安装在此特定计算机上的组件的旧版本。从许可证文件中删除旧版本解决了此问题
令人恼火的是,错误消息没有指出是什么引用导致了问题。如果您使用的是Visual Studio,请尝试“清除解决方案”,然后重新生成项目。如果您尝试使用反射进行后期绑定,则会引发完全相同的错误,如果要绑定到的程序集具有强名称或其公钥令牌已更改。即使实际上没有找到任何具有指定公钥令牌的程序集,错误也是相同的
您需要添加正确的公钥令牌(您可以使用dll上的sn-T获得它)来解决错误。希望这能有所帮助。我的情况与内森·贝德福德的《华盛顿邮报》非常相似,但有点扭曲。我的项目也以两种方式引用了更改的dll。1) 直接和2)通过引用本身引用了更改的dll的组件(类库)间接进行。现在,我的组件(2)的Visual studio项目引用了更改的dll的正确版本。但是,组件本身的版本号没有更改。因此,新版本项目的安装未能在客户端计算机上替换该组件 最终结果:直接引用(1)和间接引用(2)指向客户端计算机上更改的dll的不同版本。在我的开发机器上,它工作得很好
决议:删除应用程序;从应用程序文件夹中删除所有DLL;在我的例子中,它是C:\WINDOWS\Microsoft.NET\Framework\~\Temporary ASP.NET Files\目录中DLL的旧版本。您可以删除或替换旧版本,也可以删除并重新添加对项目中DLL的引用。基本上,不管怎样
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>
<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>
<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>
<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" />
Get-Project -All | Add-BindingRedirect
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.0.0</Version>
</PropertyGroup>
- task: DotNetCoreCLI@2
displayName: 'pack'
inputs:
command: pack
nobuild: true
configurationToPack: 'Release'
includesource: true
includesymbols: true
packagesToPack: 'MyNugetProject1.csproj;**/MyNugetProject2.csproj'
versioningScheme: 'byEnvVar'
versionEnvVar: 'GitVersion.SemVer'