如果我运行此代码:
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?有什么建议吗?
你有没有尝试过
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))应该起作用。