1

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

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

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

4

1 回答 1

2

您必须:

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