【问题标题】:Is Add-Type -AssemblyName PresentationFramework still required in PowerShell?PowerShell 中是否仍需要 Add-Type -AssemblyName PresentationFramework?
【发布时间】:2020-11-10 22:13:46
【问题描述】:

我有以下 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 年的培训课程。我想知道是否由于 PowerShell 的变化而不再需要 Add-Type 语句? PowerShell 环境中是否默认包含有问题的程序集?我在 Windows 10 上使用 ISE 和 VS Code 进行了测试。

【问题讨论】:

  • [Windows.Markup.XamlReader] 需要 PresentationFramework 程序集...默认情况下不加载
  • @Avshalom 但是为什么它仍然适用于 Add-Type 注释掉?
  • 您使用的是哪个 powershell 版本?
  • @Avshalom 5.1.19041.1.
  • 启动一个新的 powershell 窗口并检查已经加载了哪些程序集:[System.AppDomain]::CurrentDomain.GetAssemblies() | ? Location | Select Name, Location, Version

标签: wpf powershell add-type


【解决方案1】:

感谢 Avshalom 的帮助,我能够解决这个问题:在新的 PowerShell 会话中首次调用 Add-Type 后,程序集保持驻留。这就是为什么我能够注释掉该声明并使其仍然有效的原因。

但是当那个会话被拆除并开始一个新的会话时,程序集不再驻留,并且仍然需要对应的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多