Не удается загрузить оснастку 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:
ответ Microsoft заключается в том, что они "зарегистрировали [проблему] с командой Exchange"
в качестве обходного пути вы можете выполнить одно из следующих действий:
- удалить .NET 4.5
- изменение целевой структуры приложения в 2.0 или 3.5.
Я исследовал фактическую ошибку в сборках Microsoft Exchange, и проблема заключалась в классе ExTraceConfiguration (внутреннем) от Microsoft.Обмен.Диагностика.сборка dll перечисляет все загруженные сборки в текущем домене приложения. Если он найдет систему.IdentityModel или системы.ServiceModel, он использует отражение для настройки некоторой трассировки для них. Но код отражения не совместим с
решение заключается в использовании отражения на Microsoft.Обмен.Диагностика.dll, загрузите тип ExTraceConfiguration и запустите его инициализатор типа:
type.TypeInitializer.Invoke(null, null);
перед системой.ServiceModel имел возможность загрузить еще в вашем домене приложения. Этот инициализатор является статическим конструктором, который может выполняться только один раз для каждого процесса, поэтому после этого вы в безопасности чтобы загрузить ServiceModel, если вам это нужно.
У меня точно такая же проблема с тем же выводом ошибок с моим производственным сервером. Однако у меня есть тестовый сервер с той же конфигурацией с использованием .Net 4.5 framework, но без этой проблемы. Поэтому я не думаю, что удаление .Net 4.5 решит мою проблему.
мое решение-я нашел это на производственном сервере ASP.Net Олицетворение настройка в IIS была включено.
после его отключения можно создать мое пространство запуска powershell, Майкрософт.Обмен.Управление.В PowerShell.E2010 " snapin можно добавить, мое приложение работает нормально!
похоже, что у него есть какая-то проблема с разрешением.