Не удается устранить ошибку времени выполнения типа после регистрации Enterprise Library в GAC - PullRequest
4 голосов
/ 29 сентября 2011

Я работал над регистрацией сборок Enterprise Library в глобальном кэше сборок (GAC). Я использую версию 5.0 корпоративной библиотеки, которую я подписал своим собственным ключом, и использую сборки в ряде приложений .NET 4.0.

После успешной регистрации сборок Enterprise Library в GAC приложение запустилось с таким сообщением:

Тип "Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" не может быть разрешен. Пожалуйста, проверьте правильность написания или полное имя типа.

Когда я отменяю регистрацию сборок Enterprise Library в GAC, приложение возвращается в нормальные рабочие условия.

Что вызывает сбой приложения при регистрации сборок Enterprise Library в GAC?

1 Ответ

7 голосов
/ 29 сентября 2011

Это потребовало немного охоты, чтобы выяснить, что произошло. Как выясняется, внутренняя библиотека предприятия использует частичные имена для динамической загрузки типов. В этом случае Корпоративная библиотека пытается загрузить Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter динамически, поскольку она появляется в файле конфигурации.

Чтобы обойти частичные ссылки на имена во время выполнения, просто введите элемент qualifyAssembly в файле конфигурации (см. Элемент в документации MSDN).

В моем случае все, что мне нужно было ввести, это запись:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" 
                       fullName="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </assemblyBinding>
</runtime>
...