Asp.net &引用;FileNotFoundException“;由于“";”引发异常;复制本地=false";

Asp.net &引用;FileNotFoundException“;由于“";”引发异常;复制本地=false";,asp.net,visual-studio,filenotfoundexception,copy-local,Asp.net,Visual Studio,Filenotfoundexception,Copy Local,我有大约20个解决方案,每个解决方案有5-10个项目,它们相互引用,还有一些第三方库。我有一个输出文件夹,它们都是构建的。因此,我不想拥有被引用的每个程序集的任何副本(这就是需求所在)。因此,对于其中一个项目中的每个引用,我都将Copy local设置为false,并且它在编译时没有抛出错误。但在运行时,它抛出了FileNotFoundException,说“无法加载文件或程序集'X'或其依赖项之一。系统找不到指定的文件。”正如我在和线程中所读到的,您可以指定CLR要搜索的路径,但它们必须是应用

我有大约20个解决方案,每个解决方案有5-10个项目,它们相互引用,还有一些第三方库。我有一个输出文件夹,它们都是构建的。因此,我不想拥有被引用的每个程序集的任何副本(这就是需求所在)。因此,对于其中一个项目中的每个引用,我都将Copy local设置为false,并且它在编译时没有抛出错误。但在运行时,它抛出了FileNotFoundException,说“无法加载文件或程序集'X'或其依赖项之一。系统找不到指定的文件。”正如我在和线程中所读到的,您可以指定CLR要搜索的路径,但它们必须是应用程序基文件夹的子文件夹,而且因为我有10个windows服务,这意味着我必须复制每个服务的基本文件夹中引用的程序集(这不是重点)

我注意到的一件事是,当项目A引用了项目B时,不仅复制了B.dll,而且还复制了C.dll(从B引用)、D.dll等。奇怪的是,当我将引用B的Copy local设置为false,并删除了B.dll的副本时,没有问题——它设法在输出目录中找到它,但是当我删除C.dll(或D.dll)的副本时,问题就出现了。因此,我将项目B中的C引用的Copy local设置为false,但没有帮助

有人知道为什么会发生这种情况吗?

你必须:

  • 将它们保存在GAC中,这样每个应用程序都可以找到引用的程序集
  • 为AppDomain.AssemblyResolve实现一个事件处理程序,以便自己查找程序集
  • 将生成脚本中的所有程序集复制到正确的文件夹,或使用一个中心文件夹

据我所知,在GAC中保存应用程序库不是一个好主意。我不太理解您的第三个建议:-“将构建脚本中的所有程序集复制到正确的文件夹”-这意味着将一个dll复制到多个文件夹,这是我试图避免的。“或者使用一个中心文件夹”-我有一个输出文件夹,我在其中构建所有库。嗯,有三个选项。挑一个最适合你的。您可以使用VisualStudio生成脚本执行生成后操作,如简单的复制命令。