.Assembly / GetExportedTypes抛出FileNotFoundException

时间:2009-09-22 14:35:38

标签: c# reflection

如果我运行此代码:

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?有什么建议吗?

3 个答案:

答案 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反射。这就是GetExecutingAssemblyGetAssembly(tyepof(MyType))应该起作用的原因。

答案 2 :(得分:0)

如果您尝试加载不是 ExecutingAssembly的程序集,并且该DLL引用了较低级别的对象,如MyProj.Interfaces或MyProj.BaseClasses或Infragistics控件或类似的东西。 ..那些dll也必须在你加载初始dll的同一个文件夹中可用。

相关问题