我有大约20个解决方案,每个解决方案有5-10个项目,它们互相引用,也引用了一些第三方库。我有一个Output文件夹,所有这些都是构建的。因此,我不希望获得所引用的每个程序集的任何副本(这些要求是什么)。因此,我为其中一个项目中的每个引用设置了Copy local to false,并且它在编译时没有抛出错误。但是在运行时它抛出FileNotFoundException,说"无法加载文件或程序集' X'或其中一个依赖项。系统找不到指定的文件。"正如我在this和this线程中读到的那样,您可以指定要搜索的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,但它没有帮助。
有没有人知道为什么会这样?
答案 0 :(得分:2)
您必须:
AppDomain.AssemblyResolve
实现事件处理程序以自行查找程序集;