Я создаю собственный командлет powershell 1.0, который позволит мне передавать исключения из сценариев powershell в блок обработки исключений Microsoft Enterprise Library v5.0.
Я загружаю свою конфигурацию обработки исключений из внешнегофайл, так как командлет скомпилирован в dll, а затем попытайтесь создать экземпляр ExceptionManager с помощью config.
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource config =
new Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource(configFile);
WriteDebug("Config loaded from " + Path.GetFullPath(configFile));
EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(config);
exManager = EnterpriseLibraryContainer.CreateDefaultContainer(config).GetInstance<ExceptionManager>();
Это происходит сбой, когда я вызываю свою команду из powershell со следующей ошибкой:
Microsoft.Practices.ServiceLocation.ActivationException: произошла ошибка активации при попытке получить экземпляр типа ExceptionManager, ключ "" ---> Microsoft.Practices.Unity.ResolutionFailedException: сбой разрешения зависимости, type = "Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManager ", name =" (none) ".Исключение произошло во время: при разрешении.Исключение: InvalidOperationException - Тип ExceptionManager не может быть создан.Вы должны сконфигурировать контейнер для предоставления этого значения.
Огорчает то, что код прекрасно работает при использовании в автономном консольном приложении с точно такой же конфигурацией.Я не совсем уверен, почему я получаю эту ошибку;Я убедился, что я использую те же сборки, на которые есть ссылки в файле конфигурации, и я убедился, что я ссылаюсь на все необходимые библиотеки библиотеки предприятия в моем проекте.
Кроме того, мне пришлось скопировать библиотеки Enterprise Library в установочную директорию powershell (% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0), в противном случае я получил бы FileNotFoundExceptions из-за невозможности найти правильныйбиблиотека во время обработки файла конфигурации.У меня нет особого опыта работы с PowerShell или корпоративной библиотекой, но я предполагаю, что это можно решить, поиграв с настройками AppDomain.