2017-12-08 57 views
1

私はGACではなくDLLをpowershellにロードしようとしています。powershell - GACにないDLLの参照に苦労しています

このDLLは、Microsoft.Diagnostics.Runtime (ClrMD) Nuget Packageの一部です。 the full documentation for Microsoft.Diagnostics.Runtimeを参照してください。

DLLは、厳密な名前で作成されていなかったので、私はGACにそれを得る傾ける理由はある(つまります。gacutilが言うことだ)

だから私は、下記のオプションをすべて試してみました..しかし、ことはできませんしました

$dllpath = somepath\Microsoft.Diagnostics.Runtime.0.9.170809.03\lib\net40\Microsoft.Diagnostics.Runtime.dll" 

#LoadFile (this shouldnt work according to method documentation,.. it's just for inspection) 
[System.Reflection.Assembly]::LoadFile($dllpath) 

#LoadFrom 
[System.Reflection.Assembly]::LoadFrom($dllpath) 

#LoadwithPartialName .. this is deprecated 
[reflection.assembly]::LoadWithPartialName("Microsoft.Diagnostics.Runtime") 

# add-type 
add-type -path $dllpath 

とも

$dllname = "Microsoft.Diagnostics.Runtime, Version=0.8.31.1, Culture=neutral, PublicKeyToken=null" 
[System.Reflection.Assembly]::Load($dllname) 

DLLNAME私が使用してしまった:

誰もがいずれかのトリックを持っている場合はそれを動作させる。..不思議とにかく
$dllpath = "somepath\Microsoft.Diagnostics.Runtime.0.9.170809.03\lib\net40\Microsoft.Diagnostics.Runtime.dll" 
$dllname = [System.Reflection.AssemblyName]::GetAssemblyName($dllpath).Fullname 

....例すべてで、私はDLLは、私のセッション内での現在のAppDomainにロードされてしまっていることがわかります上:

[System.AppDomain]::CurrentDomain.GetAssemblies() | where-object -Filterscript {$_.Fullname -like "*Diagnostics*"} 

が、私が参照しようとすると、それは「タイプを語ります利用できません "

それはインテリセンスのプロパティ/メソッド を吐き出す必要があります後、私はダブルコロンを入力する。しかし、それはして失敗したとき

これは動作するはずです。..も

[Microsoft.Diagnostics.Runtime] 

これは間違いなく動作するはずです「が見つかりませんタイプ」。これは 最初の変数がPROCESSIDある静的メソッドである私の知る限り、第二の可変タイムアウト(秒)である しかし、それは

[Microsoft.Diagnostics.Runtime]::DataTarget.AttachToProcess(7984,5000) 

は、それは明らかにC#のでは動作しますが見つかりません「TYPE」で失敗が、私は本当にいけないことを学びたいです今私はそれのまわりで私の頭を取得しながら、それは私を遅らせるよう...多分必要なステップ...

+0

一つのことを呼び出してみてください。私はそれが何が違うのか分からないが、それはそうである。 'New-ModuleManifest'を使い、' RequiredAssemblies = @() 'フィールドを変更してください。あなたが入力するパスは '.psd1'ファイルの相対位置です。 – TheIncorrigible1

+0

は、アセンブリを参照する際にエラーが発生してしまったという結果に終わりました.... powershellが必要です '' '[Microsoft.Diagnostics.Runtime。DataTarget] :: AttachToProcess(7984,5000) '' ' ' '' [Microsoft.Diagnostics.Runtime] :: DataTarget.AttachToProcess(7984,5000) '' ' – g0pher

答えて

0

、私のコメントに展開するファイルを作成するには:

MyModule.psd1

@{ 
    RequiredAssemblies = @('bin\lib.dll','bin\lib2.dll') 
} 

あなたのフォルダ構造がそうのようになります。

C:. 
|---MyModule 
    |---MyModule.psd1 
    |---bin 
     |---lib.dll 
     |---lib2.dll 

今すぐあなたのDLLをロードするためにImport-Module -Name 'C:\MyModule'を利用しています。

+0

ありがとう、これは素晴らしいです。私が一度も見たことのない方法であることを正確にマーキングする。 – g0pher

0

はちょうど私が `追加-type`がしたDLLの代わりの反射を読み込むか、マニフェストモジュールを使用していると運を持っていたインポートモジュールpathToDll

関連する問題