PowerShell - 为加载的程序集设置别名

7 .net powershell

我使用此代码将.Net程序集加载到PowerShell:

[System.Reflection.Assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") | out-null 
[System.Windows.Forms.MessageBox]::Show("Hello world")
Run Code Online (Sandbox Code Playgroud)

我可以为程序集设置别名(例如:'System.Windows.Forms'='Forms'),这样在调用MessageBox.Show()等静态方法时我不必输入程序集的全名吗?

ste*_*tej 13

您可以将类型存储在变量中并使用该变量

$forms = [System.Windows.Forms.MessageBox]
$forms::Show('Hello')
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以像这样加载程序集:

Add-Type –assembly system.windows.forms
Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 5

虽然您无法创建某种名称空间别名,但您可以使用以下技巧(取自Lee Holmes的PowerShell Cookbook):

$namespace = "System.Windows.Forms.{0}"
$form = New-Object ($namespace -f "Form")
Run Code Online (Sandbox Code Playgroud)

但这只会起作用,New-Object因为它需要一个字符串作为类名.您不能在方括号中使用带有类型名称的语法.

但是,你可以做的是省略System暗示的部分:

[Windows.Forms.MessageBox]::Show("Hello World!")
Run Code Online (Sandbox Code Playgroud)

使它稍短.