9

我间歇性地收到以下错误:

无法加载文件或程序集“com.mycompany.myapp”或其依赖项之一。找到的程序集的清单与程序集引用不匹配。

我有一个 Ajax 用户控件库,我构建并编译为 DLL。该项目引用了项目 A (com.mycompany.myapp)。我的主 Web 应用程序引用了这个 DLL,也引用了 Project A。有时,当我尝试重建我的 Web 应用程序时会发生此错误。似乎对项目 A 的引用在 DLL 和 Web 应用程序之间变得不同步。

这只能通过重新构建 DLL、从 Web 应用程序中删除对 DLL 的引用、重新添加引用,然后重新构建 Web 应用程序来解决。谁能解释为什么会发生这种情况以及如何防止出现此错误?

我正在寻找一种能够解决此问题的解决方案,以便我可以分发此 DLL,而不必担心需要间歇性地重建和部署它。

4

4 回答 4

1

这可能会对你有所帮助.. 我之前遇到过同样的问题,我所做的是,我删除了 bin 文件夹中的文件,然后重建应用程序,然后在主项目中添加另一个项目,然后重建它们。

“无法加载文件或程序集”错误,但我不知道哪个项目正在使用旧编号引用此程序集

于 2013-04-17T14:41:09.820 回答
1

验证对项目 A 的引用(对于两个项目)并确保它们引用相同的程序集和/或项目。(最常见的原因) 名称为 xxx.dll 的已定位程序集的清单定义与程序集引用不匹配

于 2013-04-21T18:18:49.770 回答
1

如果您的所有项目都在同一个解决方案中,则需要确保它们都是项目引用而不是文件引用。您可以通过右键单击项目并转到属性 => 引用来检查这一点。

在您的参考列表中,您会看到一个名为“复制本地”的列。如果将其设置为 false,则表示您通过文件而不是项目引用它(在构建 DLL 后不会更新 DLL)。要解决它,请删除引用并再次添加(确保从解决方案中引用它,而不是通过引用硬盘驱动器上的 DLL)。

如果您没有在同一个解决方案中包含所有项目,那么这是正常行为。假设您的 Ajax 控件库在解决方案之外。

开始的情况是这样的:

  • Ajax 引用 A(版本 1)
  • 项目参考 A(版本 1)
  • 项目参考 Ajax(版本 1)

构建解决方案后(其中没有 Ajax 项目),您将遇到以下情况:

  • Ajax 引用 A(版本 1)
  • 项目参考 A(版本 2)
  • 项目参考 Ajax(版本 1)

如您所见,编译器突然需要对 A 版本 1 和版本 2 的引用,所以这是不可能的,它会给您一个错误。这也可以解释为什么当您进行重建并删除 DLL 并再次添加它时它会起作用。

这里的解决方案是将 Ajax 项目添加到您的解决方案中并每次都重新构建它。

于 2013-04-21T21:47:43.290 回答
1

检查您的程序集“com.mycompany.myapp”是否在其 AssemblyInfo.cs 文件中没有 AssemblyVersion 属性,或者该版本没有导致自动生成版本的星号。

只是一个想法。

于 2013-06-11T16:24:41.630 回答