カスタムのPowerShell1.0コマンドレットを作成しています。これにより、PowerShellスクリプトからMicrosoft EnterpriseLibraryv5.0の例外処理ブロックに例外をフィードできます。
コマンドレットがdllにコンパイルされているため、外部ファイルから例外処理構成をロードし、構成を使用してExceptionManagerのインスタンスを作成しようとします。
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:依存関係の解決に失敗しました。タイプ="Microsoft.Practices.EnterpriseLibrary。 ExceptionHandling.ExceptionManager "、name ="(なし)"。例外が発生しました:解決中。例外は次のとおりです。InvalidOperationException-タイプExceptionManagerを構築できません。この値を提供するようにコンテナを構成する必要があります。
イライラするのは、まったく同じ構成のスタンドアロンコンソールアプリケーションでコードを使用すると、コードが完全に正常に機能することです。なぜこのエラーが発生するのかよくわかりません。構成ファイルで参照されているものと同じアセンブリを使用していることを確認し、プロジェクトで必要なすべてのエンタープライズライブラリdllを参照していることを確認しました。
さらに、Enterprise Library dllをPowerShellインストールディレクトリ(%SystemRoot%\ system32 \ WindowsPowerShell \ v1.0)にコピーする必要がありました。そうしないと、構成ファイルが存在するときに正しいライブラリが見つからないというFileNotFoundExceptionsが発生します。処理中です。PowerShellやエンタープライズライブラリの経験はあまりありませんが、AppDomainの設定をいじることで解決できると思います。