动态加载引用其他DLL的DLL

时间:2013-11-01 14:38:52

标签: c# c#-4.0 dll system.reflection

我在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)
  4. 由于应用程序没有明确引用那些“通用”DLL,因此我得到了一个例外。

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

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

    感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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));