我正在尝试在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文件的旧版本的内容,有什么建议吗?

此外,我想我的硬盘上甚至没有这个旧组件。是否有任何工具可以搜索此旧版本的程序集?


当前回答

我今天遇到了同样的问题,在我对实体框架进行了更改后,我无法执行添加迁移。

我的解决方案中有两个项目,我们称它们为“客户端”和“数据”,这是一个包含我的EF模型和上下文的类库项目。客户参考了数据项目。

我已经签署了两个项目,然后对EF模型进行了修改。删除签名后,我可以添加迁移,然后可以重新签署项目。

我希望这对某人有用,避免他们长期受挫。。

其他回答

我现在要让所有人都大吃一惊。

从.config文件中删除所有<assemblyBinding>引用,然后从NuGet Package Manager控制台运行以下命令:

Get-Project -All | Add-BindingRedirect

我今天遇到了同样的问题,在我对实体框架进行了更改后,我无法执行添加迁移。

我的解决方案中有两个项目,我们称它们为“客户端”和“数据”,这是一个包含我的EF模型和上下文的类库项目。客户参考了数据项目。

我已经签署了两个项目,然后对EF模型进行了修改。删除签名后,我可以添加迁移,然后可以重新签署项目。

我希望这对某人有用,避免他们长期受挫。。

如果尝试使用反射进行后期绑定,如果绑定到的程序集具有强名称或其公钥标记已更改,则会引发完全相同的错误。即使实际上没有使用指定的公钥令牌找到任何程序集,错误也是一样的。

您需要添加正确的公钥令牌(可以使用dll上的sn-T获取它)以解决错误。希望这有帮助。

尝试将缺少的内容添加到全局程序集缓存中。

没有适合我的解决方案。我尝试了清理项目解决方案、删除bin、更新包、降级包等……两个小时后,我用程序集从项目加载了默认App.config,并在那里更改了错误的引用版本:

<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>

to:

<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>

在这之后,我清理了这个项目,再次构建它,它成功了。没有警告没有问题。