Проблемы с ReflectionOnly загружают контекст - PullRequest
2 голосов
/ 29 января 2012

Я пытаюсь ускорить свое приложение, загружая определенные библиотеки DLL в контекст ReflectionOnly.

Эта загрузка происходит на вторичном домене приложений, который регистрирует как обработчики событий AssemblyResolve, так и AssemblyReflectionOnlyResolve.По какой-то причине при загрузке этих сборок код завершается сбоем в этом методе:

Type[] tps = dll.GetTypes();

Это вызывает исключение, говорящее:

Невозможно разрешить зависимость от сборки 'System, Version = 2.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089 ', поскольку он не был предварительно загружен.При использовании API-интерфейсов ReflectionOnly зависимые сборки должны быть предварительно загружены или загружены по требованию через событие ReflectionOnlyAssemblyResolve.

При загрузке сборок не в контексте Reflection Only это работает так, как предполагалось.

Есть ли какие-либо ошибки / предостережения для использования контекста «Только отражение»?почему среда выполнения не может найти эту сборку в GAC и загрузить ее как обычно?я что-то упустил?

1 Ответ

7 голосов
/ 29 января 2012

Из MSDN: «Зависимости не загружаются автоматически в контекст только для отражения».Таким образом, в вашем обработчике событий AppDomain.ReflectionOnlyResolve вы должны загрузить Assembly.ReflectionOnlyLoad () «System, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089».Вы должны получить имя зависимой сборки из свойства Name ResolveEventArgs, так как

 public static Assembly My_AssemblyResolve(object sender, ResolveEventArgs args) 
 {
      string missedAssemblyFullName = args.Name;
      Assembly assembly = Assembly.ReflectionOnlyLoad(missedAssemblyFullName); 
      return assembly
 }

Примечание: ReflectionOnlyLoad () загружает только сборки в GAC.Вы можете использовать ReflectionOnlyLoadFrom для прямой загрузки dll.

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