" FileNotFoundException异常"由于"复制local = false"引发异常

时间:2014-05-30 08:46:57

标签: asp.net visual-studio filenotfoundexception copy-local

我有大约20个解决方案,每个解决方案有5-10个项目,它们互相引用,也引用了一些第三方库。我有一个Output文件夹,所有这些都是构建的。因此,我不希望获得所引用的每个程序集的任何副本(这些要求是什么)。因此,我为其中一个项目中的每个引用设置了Copy local to false,并且它在编译时没有抛出错误。但是在运行时它抛出FileNotFoundException,说"无法加载文件或程序集' X'或其中一个依赖项。系统找不到指定的文件。"正如我在thisthis线程中读到的那样,您可以指定要搜索的CLR的路径,但它们必须是应用程序基础文件夹的子文件夹,因为我有10个Windows服务,这意味着我必须在每个服务的基本文件夹中复制引用的程序集(这不是重点)。

我注意到的一件事是,当项目A引用项目B时,不仅要复制B.dll,还要复制C.dll(从B引用),D.dll等。奇怪的是当我将Copy local设置为false以供参考B而我删除B.dll的副本没有问题 - 它设法在Output目录中找到它,但是当我删除C.dll的副本时(或者D.dll)问题发生的时间。所以我在项目B中为C引用设置了Copy local to false,但它没有帮助。

有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

您必须:

  • 将它们保存在GAC中,以便每个应用都可以找到引用的程序集;
  • AppDomain.AssemblyResolve实现事件处理程序以自行查找程序集;
  • 将构建脚本中的所有程序集复制到正确的文件夹,或使用一个中央文件夹。