powershell - 努力引用不在GAC中的DLL

时间:2017-12-08 13:35:52

标签: .net powershell clrmd

我尝试(并且失败)将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) 

我使用的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*"}

但是当我尝试引用它时说"键入不可用"

e.g。

这应该工作..当我输入双重冒号后,intellisense应该吐出属性/方法 但它失败了"未找到类型"

[Microsoft.Diagnostics.Runtime]

这绝对有效。 afaik这是一种静态的方法 第一个变量是processID,第二个变量是timeout(秒) 但它失败了"未找到类型"

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

它显然可以与C#一起使用,但我现在真的不想学习它,因为它会让我耽误我的时间,但是我可能需要一步......

2 个答案:

答案 0 :(得分:0)

要扩展我的评论,请创建一个文件:

MyModule.psd1

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

您的文件夹结构应如下所示:

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

现在使用Import-Module -Name 'C:\MyModule'加载你的dll。

答案 1 :(得分:0)

尝试只调用Import-Module pathToDll