3

我正在使用 C# .Net 4.0

我有以下架构部分:

  1. 三个“通用”DLL:X.dll、Y.dll 和 Z.dll
  2. 一个引用“通用”DLL 的“特定”DLL (A.dll)
  3. 一个动态加载 A.dll 的 C# 应用程序(我使用System.Reflection.Assembly ass = Assembly.LoadFrom(filename)

由于应用程序没有明确引用那些“通用”DLL,我得到了一个异常。

所以我的问题是是否有机会以允许加载此 DLL 而无需加载那些“通用”DLL 的方式创建 A.dll。似乎我无法在不记住它引用的所有 DLL 的情况下传输我的 A.dll。

我相信在 C# 4.0 中如何完成它的方式背后有一个很好的逻辑,但也许有一些例外?

谢谢你的帮助!

4

2 回答 2

0

问题和上面描述的一样

“这里的问题是您的应用程序只加载 A.dll,因此这是复制到输出目录中的唯一 DLL,因此当 A 尝试从 X 访问代码时,它会失败,因为应用程序不知道 X 在哪里,因此无法加载它。”

但是您可以将这三个“通用”DLL:X.dll、Y.dll 和 Z.dll 放入一个文件夹中,例如 genDllFolder

    String genDllFolder = "yourpath/genDllFolder";
    AppDomain.CurrentDomain.AppendPrivatePath(genDllFolder);
    System.Reflection.Assembly ass = Assembly.LoadFrom(filename));
于 2014-04-30T19:39:20.633 回答
0

这里的问题是您的应用程序仅加载A.dll,因此这是复制到输出目录中的唯一 DLL,因此当A尝试从中访问代码X时失败,因为应用程序不知道在哪里X因此无法加载它。

这里最简单的解决方案是将其他“通​​用”DLL 安装到GAC中。或者,只需将“通用”DLL 与您的应用程序一起提供,因为除非您使用它们,否则它们不会被加载A,但是,如果不需要它们,它们对您的安装/应用程序大小来说是不必要的膨胀。

于 2013-11-01T14:42:01.120 回答