Проблема с Microsoft Enterprise Library 5.0 и пользовательским командлетом powershell - PullRequest
1 голос
/ 04 июня 2011

Я создаю собственный командлет 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.

1 Ответ

0 голосов
/ 08 июня 2011

Оказывается, я не указывал абсолютный путь к моему файлу конфигурации, что вызывало странности. Первоначально я просто установил его на "widgit.dll.config" и бросил в папку% systemroot% \ System32, так как это рабочий каталог по умолчанию для моего PowerShell, и, казалось, избавился от первоначальных ошибок "file not found" имея (не хотел менять рабочий каталог, пока я не понял всю проблему). По догадкам я скопировал конфигурацию в каталог powershell и переименовал ее в powershell.exe.config, и это решило мою другую проблему.

Размещение материалов в системных каталогах на данный момент не самое элегантное решение, но этого достаточно для моей текущей проблемы.

...