2

Powershellコンソールから直接スクリプトを実行すると、スクリプトは機能します。PowerGUIでスクリプトを実行し、オブジェクトをインスタンス化しようとすると、エラーが発生します。

「3」引数を指定して「.ctor」を呼び出す際の例外:「ファイルまたはアセンブリを読み込めませんでした'MyLib、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=77f676cc8f85d94e'またはその依存関係の1つ。システムがファイルが指定されました。」

必要なすべてのDLLを$PSHOMEに配置すると、スクリプトはコンソールから正常に実行されますが、PowerGUIからは実行されません。DLLをローカルディレクトリに移動し、リフレクションを使用してDLLをロードすると、スクリプトはPowerGUIでもPowerShellコンソールでも実行されません。

[reflection.assembly] :: loadfile('c:\ mylibs \ mylib.dll')

スクリプトをPowerGUIで実行するには、何をする必要がありますか?理想的には、DLLを$PSHOMEとは別のディレクトリに配置したいと思います。

4

3 に答える 3

4

LoadFile ではなく[Assembly]::LoadFromを使用する必要があります。LoadFile は、同じアセンブリの 2 つのバージョンを読み込もうとしている場合など、通常のアセンブリ読み込みコンテキストでは読み込めないアセンブリを読み込むことを目的としています。通常のプローブ ルールを使用しないため、依存関係が自動的に読み込まれません。以下はLoadFileのドキュメントからの抜粋です。

LoadFile メソッドを使用して、ID が同じでパスが異なるアセンブリを読み込んで調べます。LoadFile はファイルを LoadFrom コンテキストにロードせず、Lo​​adFrom メソッドのようにロード パスを使用して依存関係を解決しません。LoadFile は、ID が同じでパスが異なるアセンブリを読み込むために LoadFrom を使用できないため、この限られたシナリオで役立ちます。最初のそのようなアセンブリのみをロードします。

PowerShell 2.0 を使用している場合は、代わりに Add-Type を使用できます。

Add-Type -Path c:\mylibs\mylib.dll

他のすべてが失敗した場合は、Fuslogvw.exeを実行して、バインドが失敗した理由を調べます。

于 2010-01-05T22:04:46.093 に答える
0

set-psdebug -trace 2 を使用して、何を呼び出そうとしているのかを正確に確認してください。

于 2010-01-05T21:23:29.483 に答える
0

これは、PowerGUI が別の PowerShell ホストであるため、その「ローカル フォルダー」が Program Files 内の PowerGUI のフォルダーであり、DLL を配置する $pshome ではないことが原因である可能性があります。

于 2010-01-05T21:57:04.473 に答える