Не удается загрузить оснастку Exchange powershell: инициализатор типа "Microsoft".Обмен.Данные.Справочник.Globals " выбросил исключение

у меня есть следующий код, который создает пространство выполнения PowerShell с загруженной оснасткой Exchange 2010.

Dim runspaceConfig = RunspaceConfiguration.Create()

Dim snapInException As PSSnapInException = Nothing
runspaceConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", snapInException)

Dim runspace = RunspaceFactory.CreateRunspace(runspaceConfig)
runspace.Open()

С момента установки Visual Studio 2012 я начал получать следующую ошибку при выполнении строки, которая добавляет оснастку в конфигурацию runspace.

System.Management.Automation.Runspaces.PSSnapInException occurred
  HResult=-2146233087
  Message=Cannot load Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.E2010 because of the following error: The type initializer for 'Microsoft.Exchange.Data.Directory.Globals' threw an exception.
  Source=System.Management.Automation
  WasThrownFromThrowStatement=False
  StackTrace:
       at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadCustomPSSnapIn(PSSnapInInfo mshsnapinInfo)
       at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo)
       at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo, PSSnapInException& warning)
       at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.DoAddPSSnapIn(String name, PSSnapInException& warning)
       at System.Management.Automation.Runspaces.RunspaceConfiguration.AddPSSnapIn(String name, PSSnapInException& warning)

я смог подтвердить, что nlog каким-то образом вызывает эту проблему. Сочетание создания регистратора nlog перед созданием пространства выполнения powershell приводит к ошибка.

Если я удаляю раздел конфигурации nlog из конфигурации приложения и просто создаю пустой регистратор nlog, оснастка загружается без ошибок. Кроме того, если я оставляю конфигурацию nlog в конфигурации приложения, но не создаю регистратор NLog, оснастка также успешно загружается.

  • Я попытался построить проект как в x64, так и в x86.
  • я переустановил средства управления exchange.
  • Я пробовал тестирование на другом машина в среде Exchange.

Если кто-нибудь может предоставить какие-либо предложения, что может помочь мне решить эту проблему буду благодарен.

спасибо

4 ответов


после дальнейшего исследования я выяснил, что .NET 4.5 является обновлением на месте, что означает, что .NET 4.0 перезаписывается и заменяется .NET 4.5 при установке. Я не знаю, что изменилось в .NET 4.5, что вызывает это, но проблема решена путем удаления .NET 4.5 и переключения обратно в Visual Studio 2010. Надеюсь, в ближайшем будущем у Microsoft будет обновление, которое решит проблему и позволит мне снова использовать Visual Studio 2012.

см. следующую статью для дополнительная информация об обновлении in place. http://www.devproconnections.com/article/net-framework/net-framework-45-versioning-faces-problems-141160


похоже, это ошибка know. Существует отчет Microsoft connect:

https://connect.microsoft.com/VisualStudio/feedback/details/770748/powershell-exception-after-4-5-upgrade#tabs

ответ Microsoft заключается в том, что они "зарегистрировали [проблему] с командой Exchange"

в качестве обходного пути вы можете выполнить одно из следующих действий:

  • удалить .NET 4.5
  • изменение целевой структуры приложения в 2.0 или 3.5.

Я исследовал фактическую ошибку в сборках Microsoft Exchange, и проблема заключалась в классе ExTraceConfiguration (внутреннем) от Microsoft.Обмен.Диагностика.сборка dll перечисляет все загруженные сборки в текущем домене приложения. Если он найдет систему.IdentityModel или системы.ServiceModel, он использует отражение для настройки некоторой трассировки для них. Но код отражения не совместим с 4.5 ServiceModel и возникает ошибка. После обнаружения ошибки (a условие null проверяется) трассировка пробуется, но код в настоящее время находится в процессе настройки трассировки so => hard crash.

решение заключается в использовании отражения на Microsoft.Обмен.Диагностика.dll, загрузите тип ExTraceConfiguration и запустите его инициализатор типа:

type.TypeInitializer.Invoke(null, null);

перед системой.ServiceModel имел возможность загрузить еще в вашем домене приложения. Этот инициализатор является статическим конструктором, который может выполняться только один раз для каждого процесса, поэтому после этого вы в безопасности чтобы загрузить ServiceModel, если вам это нужно.


У меня точно такая же проблема с тем же выводом ошибок с моим производственным сервером. Однако у меня есть тестовый сервер с той же конфигурацией с использованием .Net 4.5 framework, но без этой проблемы. Поэтому я не думаю, что удаление .Net 4.5 решит мою проблему.

мое решение-я нашел это на производственном сервере ASP.Net Олицетворение настройка в IIS была включено.

после его отключения можно создать мое пространство запуска powershell, Майкрософт.Обмен.Управление.В PowerShell.E2010 " snapin можно добавить, мое приложение работает нормально!

похоже, что у него есть какая-то проблема с разрешением.