.Assembly / GetExportedTypes抛出FileNotFoundException

Joe*_*Fan 5 c# reflection

如果我运行此代码:

var myAsm = typeof(MyType).Assembly;
var types = myAsm.GetExportedTypes();
Run Code Online (Sandbox Code Playgroud)

我得到:

System.IO.FileNotFoundException : Could not load file or assembly ....
Run Code Online (Sandbox Code Playgroud)

列出了一个从属程序集。但是,如果我这样做:

var myAsm = Assembly.LoadFrom(...);  // DLL containing the same assembly as above
var types = myAsm.GetExportedTypes();
Run Code Online (Sandbox Code Playgroud)

它工作正常。

我真的更喜欢第一种技术,因为它更清洁...为什么我必须加载已经加载的DLL?有什么建议吗?

Dav*_*rab 1

你有没有尝试过

System.Reflection.Assembly.GetExecutingAssembly();
Run Code Online (Sandbox Code Playgroud)

或者

System.Reflection.Assembly.GetAssembly(typeof(MyType));
Run Code Online (Sandbox Code Playgroud)

你的第二个工作的原因是你实际上正在加载一个.dll。当您调用 typeof(MyType).Assembly 时,它不知道应该使用哪个 .dll 反射。这就是为什么GetExecutingAssemblyorGetAssembly(tyepof(MyType))应该起作用。