如果我运行此代码:
var myAsm = typeof(MyType).Assembly;
var types = myAsm.GetExportedTypes();
我明白了:
System.IO.FileNotFoundException : Could not load file or assembly ....
列出了一个依赖程序集。但是,如果我这样做:
var myAsm = Assembly.LoadFrom(...); // DLL containing the same assembly as above
var types = myAsm.GetExportedTypes();
它工作正常。
我真的更喜欢第一种技术,因为它更干净......为什么我必须加载已经加载的DLL?有什么建议吗?
答案 0 :(得分:3)
这并没有完全回答你的问题,但我刚刚遇到了一个相关的问题,我想我会发布一些信息来帮助其他可能会像我一样偶然发现的人!
Assembly
已
.LoadFile(string path)
和
.LoadFrom(string path)
如果从某个远程(与执行的dll不同)文件夹加载程序集, LoadFile
将抛出FileNotFoundException
。您需要像上面一样使用LoadFrom
;)
答案 1 :(得分:1)
你试过吗
System.Reflection.Assembly.GetExecutingAssembly();
或者
System.Reflection.Assembly.GetAssembly(typeof(MyType));
你的第二个工作的原因是你实际上正在加载一个.dll。当你调用typeof(MyType).Assembly时,它不知道应该使用哪个.dll反射。这就是GetExecutingAssembly
或GetAssembly(tyepof(MyType))
应该起作用的原因。
答案 2 :(得分:0)
如果您尝试加载不是 ExecutingAssembly的程序集,并且该DLL引用了较低级别的对象,如MyProj.Interfaces或MyProj.BaseClasses或Infragistics控件或类似的东西。 ..那些dll也必须在你加载初始dll的同一个文件夹中可用。