2017-12-08 6 views
1

GAC가 아닌 DLL을 powershell에로드하려고합니다.powershell - GAC에없는 DLL을 참조하는 데 어려움을 겪고 있습니다.

DLL은 Microsoft.Diagnostics.Runtime (ClrMD) Nuget Package 의 일부입니다. the full documentation for Microsoft.Diagnostics.Runtime을 참조하십시오.

내가 GAC에 그것을 얻을하지 못할 이유는 DLL이는 StrongName으로 생성되지 않았기 때문에

그래서 난 아래의 모든 옵션을 시도했다 (즉 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을 내가 사용하고있어 :

01,235 사람이 어떤 트릭이있는 경우 그것이 작동되도록 .. 궁금

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

하지만 난 참조하려고 할 때 "유형은 말한다 : 16,

$dllpath = "somepath\Microsoft.Diagnostics.Runtime.0.9.170809.03\lib\net40\Microsoft.Diagnostics.Runtime.dll" 
$dllname = [System.Reflection.AssemblyName]::GetAssemblyName($dllpath).Fullname 

어쨌든 .... 모든 경우에 내가 DLL이 내 세션 내에서 현재 응용 프로그램 도메인에로드있어 것을 볼 수 있습니다 위 사용할 수 없음 "

예 : 이 IntelliSense를 속성/방법 을 뱉어해야 후 내가 이중 콜론을 입력하지만 실패 할 때

이 작동합니다 .. 또한

[Microsoft.Diagnostics.Runtime] 

이 확실히 작동해야 "을 (를) 찾을 수 없습니다 입력합니다." 이 첫번째 변수는 프로세스 ID입니다 정적 방법 AFAIK, 두 번째 변수는 제한 시간 (초)입니다 그러나

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

그것은 분명 C 번호와 함께 작동 "을 (를) 찾을 수 없습니다 유형"실패하지만 난 정말 해달라고 배우고 싶어요 지금 내가 주변에 내 머리를 얻는 동안 저를 지연 것 ...하지만 어쩌면 필요한 단계는 ...

+0

한 가지를 호출하려고합니다. 나는 그것이 다르게하는 것을 모른다. 그러나 그것은한다. 'New-ModuleManifest'를 사용하고'RequiredAssemblies = @()'필드를 변경하십시오. 입력하는 경로는'.psd1' 파일의 상대 경로입니다. – TheIncorrigible1

+0

은 어셈블리를 참조 할 때 오류가 발생했습니다. ... powershell powershell requires '''[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