如何在 PowerShell 中加载 DLL 文件
How to load DLL files in PowerShell
我正在关注 MS Document 在 PowerShell 中使用 Kusto,
每当我运行安装脚本时,
$packagesRoot = "C:\Myfiles\tools"
dir $packagesRoot\* | Unblock-File
[System.Reflection.Assembly]::LoadFrom("$packagesRoot\Kusto.Data.dll")
我得到的 GAC 是错误的,无法安装 Kusto Dll 文件,如下所示
请帮帮我
没有错误,只是(你的)意外输出;只需使用
$null = [System.Reflection.Assembly]::LoadFrom("$packagesRoot\Kusto.Data.dll")
抑制不需要的输出。
但是,PowerShell 惯用的加载程序集的方法 是使用 Add-Type
,默认情况下它是静默的 (但加载失败会报错),除非你使用-PassThru
[1]:
Add-Type -LiteralPath "$packagesRoot\Kusto.Data.dll"
您看到的输出只是 PowerShell 的格式化系统如何表示 System.Reflection.Assembly
object returned from the System.Reflection.Assembly.LoadFrom()
调用 - 返回这样一个对象的事实意味着 成功 .
反映 False
的 GAC
列只是告诉您问题中的程序集未存储在 GAC 中。
顺便提一下 GAC(全局程序集缓存):
既System.Reflection.Assembly.LoadFrom()
也不Add-Type
安装程序集[在GAC中],他们只是加载一个程序集从其当前磁盘位置进入当前会话以供使用。
一般来说:
- 在 GAC 中安装程序集只能由 Windows 安装程序执行 - 请参阅 the docs
- PowerShell (Core) 7+,Windows PowerShell 的跨平台继任者,不再基于 .NET Framework,但它的跨平台成功,.NET (Core) / .NET 5+ ,不再有 GAC。
[1] -PassThru
总是输出 type,而不是 assembly 信息,这样当你将 -PassThru
与 -Path
/ -LiteralPath
组合,即当您加载程序集时,输出的是关于程序集 中包含的 类型的信息对象(不是描述程序集 本身 的对象,这是 [System.Reflection.Assembly]::LoadFrom
所做的)。然而,由于 PowerShell 7.1 中与 forwarded 类型相关的错误,后者不包括在内,这可能导致 no output 完全 -见 GitHub issue #10802.
我正在关注 MS Document 在 PowerShell 中使用 Kusto,
每当我运行安装脚本时,
$packagesRoot = "C:\Myfiles\tools"
dir $packagesRoot\* | Unblock-File
[System.Reflection.Assembly]::LoadFrom("$packagesRoot\Kusto.Data.dll")
我得到的 GAC 是错误的,无法安装 Kusto Dll 文件,如下所示
请帮帮我
没有错误,只是(你的)意外输出;只需使用
$null = [System.Reflection.Assembly]::LoadFrom("$packagesRoot\Kusto.Data.dll")
抑制不需要的输出。但是,PowerShell 惯用的加载程序集的方法 是使用
Add-Type
,默认情况下它是静默的 (但加载失败会报错),除非你使用-PassThru
[1]:
Add-Type -LiteralPath "$packagesRoot\Kusto.Data.dll"
您看到的输出只是 PowerShell 的格式化系统如何表示 System.Reflection.Assembly
object returned from the System.Reflection.Assembly.LoadFrom()
调用 - 返回这样一个对象的事实意味着 成功 .
反映 False
的 GAC
列只是告诉您问题中的程序集未存储在 GAC 中。
顺便提一下 GAC(全局程序集缓存):
既
System.Reflection.Assembly.LoadFrom()
也不Add-Type
安装程序集[在GAC中],他们只是加载一个程序集从其当前磁盘位置进入当前会话以供使用。一般来说:
- 在 GAC 中安装程序集只能由 Windows 安装程序执行 - 请参阅 the docs
- PowerShell (Core) 7+,Windows PowerShell 的跨平台继任者,不再基于 .NET Framework,但它的跨平台成功,.NET (Core) / .NET 5+ ,不再有 GAC。
[1] -PassThru
总是输出 type,而不是 assembly 信息,这样当你将 -PassThru
与 -Path
/ -LiteralPath
组合,即当您加载程序集时,输出的是关于程序集 中包含的 类型的信息对象(不是描述程序集 本身 的对象,这是 [System.Reflection.Assembly]::LoadFrom
所做的)。然而,由于 PowerShell 7.1 中与 forwarded 类型相关的错误,后者不包括在内,这可能导致 no output 完全 -见 GitHub issue #10802.