1

我有以下 PowerShell 代码:

Add-Type -AssemblyName PresentationFramework
[xml]$Form  = "<XAML window definition here>"
$NR = (New-Object System.Xml.XmlNodeReader $Form)
$Win = [Windows.Markup.XamlReader]::Load($NR)
$Win.ShowDialog()

如果我注释掉第一Add-Type条语句,脚本仍然可以工作并显示窗口 UI。

上面的脚本来自于 2016 年的培训课程。我想知道是否Add-Type由于 PowerShell 的变化而不再需要该语句?PowerShell 环境中是否默认包含有问题的程序集?我在 Windows 10 上使用 ISE 和 VS Code 进行了测试。

4

1 回答 1

0

感谢Avshalom的帮助,我能够弄清楚这一点:在Add-Type新的 PowerShell 会话中进行初始调用后,程序集保持驻留。这就是为什么我能够注释掉该声明并使其仍然有效的原因。

但是当那个会话被拆除并开始一个新的会话时,该程序集不再驻留,并且Add-Type仍然需要相应的。否则会抛出以下错误:

找不到类型 [Windows.Markup.XamlReader]。

在有问题的单个Add-Type语句之后,下面显示的程序集都被加载到会话中:

C:\WINDOWS\Microsoft.Net\assembly\GAC_64\PresentationCore\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.PowerShell.Commands.Management\v4.0_3.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero2\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXml\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Dynamic\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0
于 2020-07-21T14:49:26.360 回答