我在C#.Net 4.0
工作我有以下部分的架构:
System.Reflection.Assembly ass = Assembly.LoadFrom(filename)
)由于应用程序没有明确引用那些“通用”DLL,因此我得到了一个例外。
所以我的问题是,是否有机会创建A.dll的方式允许加载此DLL而无需加载那些“通用”DLL。似乎我不能在不记住它引用的所有DLL的情况下转移我的A.dll。
我相信在C#4.0中如何完成它的方式背后有一个很好的逻辑,但也许有一些例外吗?
感谢您的帮助!
答案 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));