powershell - 努力引用不在 GAC 中的 DLL
powershell - struggling to reference DLL that is not in GAC
我正在尝试(但失败了)将 DLL(不在 GAC 中)加载到 powershell 中。
DLL 是 Microsoft.Diagnostics.Runtime (ClrMD) Nuget Package 的一部分
参见 the full documentation for Microsoft.Diagnostics.Runtime。
我无法将它导入 GAC 的原因是因为 DLL 不是使用强名称创建的(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)
我使用的 dll 名称:
$dllpath = "somepath\Microsoft.Diagnostics.Runtime.0.9.170809.03\lib\net40\Microsoft.Diagnostics.Runtime.dll"
$dllname = [System.Reflection.AssemblyName]::GetAssemblyName($dllpath).Fullname
无论如何....在上述所有情况下,我都可以看到 DLL 已加载到会话中的当前应用程序域中:
[System.AppDomain]::CurrentDomain.GetAssemblies() | where-object -Filterscript {$_.Fullname -like "*Diagnostics*"}
但是当我尝试引用它时说 "type not available"
例如
这应该有效.. 当我输入双冒号后它的智能感知应该吐出 properties/methods
但是它失败了 "type not found"
[Microsoft.Diagnostics.Runtime]
这绝对有效。 afaik 这是一个静态方法
第一个变量是 processID,第二个变量是超时(秒)
但是它失败了 "type not found"
[Microsoft.Diagnostics.Runtime]::DataTarget.AttachToProcess(7984,5000)
它显然可以与 C# 一起使用,但我现在真的不想学习它,因为它会耽误我的时间……但也许是必要的步骤……
要扩展我的评论,请创建一个文件:
MyModule.psd1
@{
RequiredAssemblies = @('bin\lib.dll','bin\lib2.dll')
}
您的文件夹结构应如下所示:
C:.
|---MyModule
|---MyModule.psd1
|---bin
|---lib.dll
|---lib2.dll
现在利用 Import-Module -Name 'C:\MyModule'
加载您的 dll。
尝试只调用 Import-Module pathToDll
我正在尝试(但失败了)将 DLL(不在 GAC 中)加载到 powershell 中。
DLL 是 Microsoft.Diagnostics.Runtime (ClrMD) Nuget Package 的一部分 参见 the full documentation for Microsoft.Diagnostics.Runtime。
我无法将它导入 GAC 的原因是因为 DLL 不是使用强名称创建的(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)
我使用的 dll 名称:
$dllpath = "somepath\Microsoft.Diagnostics.Runtime.0.9.170809.03\lib\net40\Microsoft.Diagnostics.Runtime.dll"
$dllname = [System.Reflection.AssemblyName]::GetAssemblyName($dllpath).Fullname
无论如何....在上述所有情况下,我都可以看到 DLL 已加载到会话中的当前应用程序域中:
[System.AppDomain]::CurrentDomain.GetAssemblies() | where-object -Filterscript {$_.Fullname -like "*Diagnostics*"}
但是当我尝试引用它时说 "type not available"
例如
这应该有效.. 当我输入双冒号后它的智能感知应该吐出 properties/methods 但是它失败了 "type not found"
[Microsoft.Diagnostics.Runtime]
这绝对有效。 afaik 这是一个静态方法 第一个变量是 processID,第二个变量是超时(秒) 但是它失败了 "type not found"
[Microsoft.Diagnostics.Runtime]::DataTarget.AttachToProcess(7984,5000)
它显然可以与 C# 一起使用,但我现在真的不想学习它,因为它会耽误我的时间……但也许是必要的步骤……
要扩展我的评论,请创建一个文件:
MyModule.psd1
@{
RequiredAssemblies = @('bin\lib.dll','bin\lib2.dll')
}
您的文件夹结构应如下所示:
C:.
|---MyModule
|---MyModule.psd1
|---bin
|---lib.dll
|---lib2.dll
现在利用 Import-Module -Name 'C:\MyModule'
加载您的 dll。
尝试只调用 Import-Module pathToDll