2011-06-03 12 views
1

PowerShellスクリプトの例外をMicrosoft Enterprise Library v5.0例外処理ブロックに送るカスタムPowerShell 1.0コマンドレットを作成しています。Microsoft Enterprise Library 5.0とカスタムpowershellコマンドレットの問題

コマンドレットがdllにコンパイルされ、configを使用してExceptionManagerのインスタンスを作成しようとすると、Exception handling 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: Activation error occured while trying to get instance of type ExceptionManager, key "" ---> Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManager", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The type ExceptionManager cannot be constructed. You must configure the container to supply this value.

イライラする事は正確にスタンドアロンのコンソールアプリケーションで使用する場合のコードが完全に正常に動作していることです同じ構成。なぜ私はこのエラーが出ているのか分かりません。私は設定ファイルで参照されている同じアセンブリを使用していることを確認しました。私はプロジェクトで必要なすべてのエンタープライズライブラリDLLを参照しています。

さらに、エンタープライズライブラリのdllファイルをPowerShellインストールディレクトリ(%SystemRoot%\ system32 \ WindowsPowerShell \ v1.0)にコピーしなければなりませんでした。そうしないと、正しいライブラリを見つけることができないというFileNotFoundExceptions構成ファイルが処理されていました。 PowerShellやエンタープライズライブラリの経験はあまりありませんが、AppDomainの設定でこれを解決することで解決できるかもしれません。

+0

本当にあなたは余分なものをsystem32領域に押し込みたくないと確信しています。あなたは本当にモジュールにあなたのPowerShellのものをパッケージ化する必要があります、その後、アセンブリの解決の問題が管理されます。もう一つの問題は、PowerShellプロセスがあなたのスタンドアロンとは異なるapp.configファイルを使用していることです。 ELブロックを構成する別の方法を見つける必要があります。それは私が助けることができる何かではありません... – beefarino

+0

@beefarino提案のおかげで。システムフォルダにものを押し込むことは間違いなく理想的です。残念ながら、私はpowershell 1.0に悩まされています。だから、モジュールは私の選択肢ではないと思います。 – Atriarch

答えて

0

私は自分の設定ファイルに絶対パスを与えていないので奇妙なことが起こっていました。私はもともと "widgit.dll.config"に設定し、それを%systemroot%\ System32の下に投げました。これは私のPowerShellのデフォルトの作業ディレクトリなので、最初の "ファイルが見つかりません"というエラーを取り除いたようです(私は問題全体を理解するまで作業ディレクトリを変更したくなかった)。奇妙なことに、私はconfigをpowershellディレクトリにコピーし、それをpowershell.exe.configという名前に変更しました。これが私の他の問題を解決しました。

システムディレクトリに物を置くことは、今のところ最もエレガントな解決策ではありませんが、私の現在の問題では十分です。

関連する問題