当我调用GetExportedTypes时,我得到一个MissingMethodException,代码:
Assembly.LoadFrom(assemblyPath).GetExportedTypes();
异常(名称混淆):
System.MissingMethodException was unhandled
Message="Method not found: 'Void Namespace.IMyMethod.MyMethod(UInt32, Namespace.IMyOtherMethod ByRef, UInt32 ByRef)'."
Source="mscorlib"
StackTrace:
at System.Reflection.Assembly._GetExportedTypes()
at System.Reflection.Assembly.GetExportedTypes()
at ConsoleApplication1.Program.Main(String[] args) in C:\Documents and Settings\jpealing\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 16
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
该例外没有内部异常或其他值得一提的细节。
是什么原因引起的?我该如何解决?
Reflector加载此程序集时没有问题:
更新
有问题的程序集似乎是使用Tlbexp.exe构建的程序集 - 似乎这可能会产生某种差异。
答案 0 :(得分:2)
据我所知,只是期望某些程序集抛出此异常 - GetTypes
方法抛出类似的异常 - ReflectionTypeLoadException,但此异常也具有Types属性这似乎是成功加载的类型列表。
现在我已经调整了我的代码,以便它调用此方法并捕获结果异常:
try
(
return assembly.GetTypes();
)
catch (ReflectionTypeLoadException ex)
{
return ex.Types;
}
它并不漂亮,但它似乎确实有用。
答案 1 :(得分:0)
当我将我的项目转换为.NET 4时,我看到了类似的东西。
虽然我的问题发生在PEVERIFY,但它暗示了同样的问题。
如果在较旧的程序集上使用.NET 4,请将安全策略更改回旧版本。
这是MSDN link。