GetExportedTypes抛出MissingMethodException

时间:2010-08-18 04:40:24

标签: .net reflection

当我调用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加载此程序集时没有问题:

  • 已在GAC注册
  • 仅引用mscorlib。
  • 我没有构建程序集 - 我的计算机上只有一个版本的程序集。

更新

有问题的程序集似乎是使用Tlbexp.exe构建的程序集 - 似乎这可能会产生某种差异。

2 个答案:

答案 0 :(得分:2)

据我所知,只是期望某些程序集抛出此异常 - GetTypes方法抛出类似的异常 - ReflectionTypeLoadException,但此异常也具有Types属性这似乎是成功加载的类型列表。

现在我已经调整了我的代码,以便它调用此方法并捕获结果异常:

try
(
    return assembly.GetTypes();
)
catch (ReflectionTypeLoadException ex)
{
    return ex.Types;
}

它并不漂亮,但它似乎确实有用。

答案 1 :(得分:0)

当我将我的项目转换为.NET 4时,我看到了类似的东西。

虽然我的问题发生在PEVERIFY,但它暗示了同样的问题。

如果在较旧的程序集上使用.NET 4,请将安全策略更改回旧版本。

这是MSDN link