2013-04-12 41 views
9

我收到以下错误,间歇性地:明确的引用错误

无法加载文件或程序集com.mycompany.myapp'或它的一个依赖。定位的组件的清单与 程序集参考不匹配。

我有一个我构建并编译到DLL的Ajax用户控件库。该项目具有对项目A(com.mycompany.myapp)的引用。我的主要的Web应用程序有这个DLL的引用,也有一个参考项目A.有时,当我试图重建我的web应用程序会出现此错误。似乎对项目A的引用在DLL和Web应用程序之间不同步。

这只能通过重建DLL,除去参考从该web应用程序的DLL是固定的,重新添加的基准,然后重新生成该web应用程序。任何人都可以解释为什么会发生这种情况,以及如何防止出现这种错误?

我要寻找一个解决方案,让解决这个问题,这样我可以分发此DLL不用担心,这将需要重建和间歇性部署。

+0

尝试重新加载程序集,将其从引用中删除并重新添加。这应该解决它。 – IWIH

回答

1

如果您将所有项目都放在同一解决方案中,则需要确保它们都是项目引用而不是文件引用。您可以通过右键单击该项目并转至properties =>引用来检查此问题。

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

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

起始的情况是这样的:

  • 阿贾克斯引用(1版)
  • 项目引用(1版)
  • 项目引用阿贾克斯(1版)

在构建解决方案(不包含Ajax项目)后,您将遇到以下情况:

  • 阿贾克斯引用(1版)
  • 项目引用(第2版)
  • 项目引用阿贾克斯(1版)

正如你可以看到,编译器突然需要将参考版本1和版本2,所以这是不可能的,它会给你一个错误。这也可以解释为什么当你重建并删除DLL并重新添加它时它工作。

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

1

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

只是一个想法。