2013-08-28 17 views
10

私はいくつかの外部.NETアセンブリに含まれる型で動作する必要があるPowerShell v3モジュールを作成しています。PowerShell v3モジュールで外部.NETアセンブリを確実に参照する方法を教えてください。

このモジュールは、容易に展開できるように、このモジュールを合理的に自己完結させたいので、GACにロードされているこれらのアセンブリに依存したくありません。理想的には、必要なアセンブリDLLをモジュールフォルダに配置し、PowerShellを使用して、モジュールがロードされたときにこれらのアセンブリを自動的にロードします。

私はそうのようなアセンブリをロード強引に追加-typeコマンドを使用することができることを知っている:

Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken" 

しかし、私はalseマニフェストモジュールで必要なアセンブリのプロパティについて読んだことがあると私は期待していますモジュール内の外部アセンブリを参照するための最も確実な方法は何

# Assemblies that must be loaded prior to importing this module 
# RequiredAssemblies = @() 

:このアプローチは、一見脆弱なアドオンタイプのコードを排除することができますか?マニフェストの依存関係を宣言すると、モジュールがロードされたときに暗黙的にアセンブリがロードされますか?モジュールマニフェストを利用して必要なアセンブリをリストアップすると、アセンブリをロードするコードを記述する必要がありますか?

私は、すでに「Add-Type」アプローチを使用して作業しているので、単純な「働きたい」解決策を探しているわけではありません...私は、最も信頼性の高いやり方についてガイダンスと勧告を探していますこの。その-RequiredAssembliesパラメータの

答えて

10

New-ModuleManifestドキュメントは同意する:

は、アセンブリ(.dllファイル)は、モジュールが必要とするファイルを指定します。アセンブリファイル名を入力します。 Windows PowerShellは、型または形式の更新、ネストされたモジュールのインポート、またはRootModuleキーの値で指定されたモジュールファイルのインポートの前に、指定されたアセンブリを読み込みます。

このパラメータを使用して、任意の書式設定を更新したり、FormatsToProcessまたはTypesToProcessキー

に記載されているファイルを入力するためにロードする必要がありますアセンブリを含むモジュールが必要とするすべてのアセンブリを、リストアップして、私は何かを見つけることができません異なる(例えば、MSDNに)。

+0

このプロパティにアセンブリを確実にリストする方法をご存知ですか?私が完全修飾名を使用し、アセンブリのdllをモジュールのフォルダに置いた場合、十分であるか、何らかのパスを提供する必要がありますか?アセンブリローダーはこれらのアセンブリをどこで探すのですか? – syneptody

+0

@syneptodyロードルールは[MSDN](http://msdn.microsoft.com/en-us/library/yx7xezcf%28v=vs.100%29.aspx)に記載されています.PSHは何もしないと思いますそのモジュールのディレクトリをその検索パスに追加する以外は非常に特別です。おそらく例([PSCX](http://pscx.codeplex.com/)のような)? – Richard

+0

@syneptody私の使い方からは、アセンブリの名前がpsd1ファイルにあり、アセンブリの名前はスクリプトの同じディレクトリにあり、問題なく動作します。たとえば、次のようになります。 'RequiredAssemblies = @( 'IHE.CDA.Generation.Trifolia')' – Tedford

関連する問題