我在C# .Net 4.0中工作
我有架构的以下部分:
- 三个"通用"DLL:X.dll、Y.dll 和 Z.dll
- 一个引用"常规"DLL 的"特定"DLL (A.dll )
- 一个动态加载 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));