动态加载引用其他 DLL 的 DLL



我在C# .Net 4.0中工作

我有架构的以下部分:

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

由于应用程序没有显式引用这些"常规"DLL,因此我得到了一个异常。

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

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

感谢您的任何帮助!

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

此处最简单的解决方案是将其他"常规"DLL 安装到 GAC 中。或者,只需随应用一起提供"常规"DLL,因为除非您无论如何都使用A否则不会加载它们,尽管如果不需要它们,它们在您的安装/应用程序大小上是不必要的膨胀。

问题与上面描述的相同

"这里的问题是你的应用程序只加载 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));

相关内容

最新更新