MissingMethodException, выброшенный GetExportedTypes - PullRequest
3 голосов
/ 18 августа 2010

Я получаю исключение MissingMethodException при вызове GetExportedTypes, код:

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:

Исключение не имеет внутреннего исключения илидругие детали, которые стоит упомянуть.

Что вызывает это?Как я могу это исправить?

Отражатель без проблем загружает эту сборку:

  • Он зарегистрирован в GAC
  • Он ссылается только на mscorlib.
  • Я не собирал сборку - на моей машине есть только 1 версия этой сборки.

Обновление:

Появляется рассматриваемая сборкабыть сборкой, созданной с использованием Tlbexp.exe - похоже, что это что-то меняет.

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Насколько я вижу, просто ожидается, что некоторые сборки выдают это исключение - метод GetTypes выдает подобное исключение - ReflectionTypeLoadException , однако это исключение также имеет Типы свойство, которое выглядит как список типов, которые были успешно загружены.

На данный момент я адаптировал свой код так, чтобы он вызывал этот метод и перехватывал результирующее исключение:

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

Это не красиво, но, похоже, работает.

0 голосов
/ 18 августа 2010

Я видел нечто подобное, когда конвертировал свой проект в .NET 4.

Хотя моя проблема возникла в PEVERIFY, она намекала на ту же проблему.

Если вы используете .NET 4 на более старой сборке, измените политику безопасности на старую.

Вот ссылка MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...