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

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


当前回答

如果您正在使用Visual Studio,请尝试“清理解决方案”,然后重新生成项目。

其他回答

以下命令将任何程序集版本重定向到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),这将无法工作。

由于引用了与我正在生成的程序集同名的程序集,我收到了此错误消息。

这已编译,但它用当前项目程序集覆盖引用的程序集,从而导致错误。

为了解决这个问题,我更改了项目的名称,并通过右键单击项目并选择“财产”来更改可用的程序集财产。

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

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

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

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

我会让别人从我的愚蠢中受益。我对一个完全独立的应用程序有一些依赖性(让我们称之为App1)。来自App1的dll被拉入我的新应用程序(App2)。每当我在APP1中进行更新时,我都必须创建新的dll并将其复制到App2中。好我厌倦了在两个不同的App1版本之间复制和粘贴,所以我只是在dll中添加了一个“NEW_”前缀。

好我猜构建过程会扫描/bin文件夹,当它不正确地匹配某个内容时,会弹出与上面提到的相同的错误消息。我删除了我的“新版本”,它做得很好。

我在尝试更新网站的一个DLL文件时遇到了类似的问题。

当我简单地通过FTP将此DLL文件复制到bin文件夹时,发生了此错误。

我通过以下方式解决了此问题:

停止网站;复制所需的DLL文件/DLL文件;启动网站