我正在尝试在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误:
System.IO.FileLoadException:未能加载文件或程序集“Utility,Version=1.2.0.200,Culture=neutral,PublicKeyToken=764d581291d764f7”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)**位于x.Foo.FooGO()位于Foo.cs:line 123中的x.Foo.Foo2(String groupName_)位于FooTests.cs:line 98中的x.Foo.UnitTests.FooTests.TestFoo()**System.IO.FileLoadException:未能加载文件或程序集“Utility,Version=1.2.0.203,Culture=neutral,PublicKeyToken=764d581291d764f7”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)
我查阅了我的参考资料,我只参考了实用程序版本1.2.0.203(另一个是旧版本)。
关于我如何找出试图引用此DLL文件的旧版本的内容,有什么建议吗?
此外,我想我的硬盘上甚至没有这个旧组件。是否有任何工具可以搜索此旧版本的程序集?
我也有类似的问题,但没有一个答案对我有效。
对我有效的解决方案是手动从项目文件(YourProject.csproj)中删除publicKeyToken部分。
以前是:
<Reference Include="Utility, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e71b9933bfee3534, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>dlls\Utility.dll</HintPath>
</Reference>
更改后为:
<Reference Include="Utility, Version=1.0.1.100, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>dlls\Utility.dll</HintPath>
</Reference>
确保SpecificVersion为False。
与“文件资源管理器”>“属性”>“详细信息”选项卡中的版本相比,.DLL在代码中使用反射的“版本”属性报告不同的版本并不罕见。
多年来,我发现使用这种powershell可以更好地找到应该将绑定重定向设置到哪个版本。
[Reflection.AssemblyName]::GetAssemblyName('C:\Source\Project\Web\bin\System.Memory.dll').Version
Major Minor Build Revision
----- ----- ----- --------
4 0 1 2
通过以上步骤,我可以在app.config文件中插入(或替换)绑定重定向:
<dependentAssembly>
<assemblyIdentity name="System.Memory" culture="neutral" publicKeyToken="cc7b13ffcd2ddd51"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2"/>
</dependentAssembly>
在该特定示例中,System.Memory.dll的“详细信息”选项卡报告的文件版本为4.6.31308.01。