You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PowerShell Core 7.5与.NET 9中使用App.xaml渲染WPF GUI的问题

PowerShell Core 7.5 + .NET 9 下WPF StaticResource异常修复及Fluent主题集成方案

问题根源

System.Windows.StaticResourceExtension异常本质是资源字典未被正确注入应用上下文,或者PowerShell加载WPF程序集的顺序不对,导致静态资源无法被解析。.NET 9对WPF程序集加载逻辑做了调整,加上PowerShell Core的宿主特性,必须针对性适配。

分步解决

1. 手动加载必备WPF程序集

PowerShell Core不会自动加载WPF组件,必须手动导入,包括Fluent主题程序集:

# 加载基础WPF核心程序集
Add-Type -AssemblyName PresentationFramework,PresentationCore,WindowsBase
# 加载Fluent主题程序集,替换为你的本地路径(NuGet安装的话可在~/.nuget/packages目录下查找)
Add-Type -Path "C:/Users/[你的用户名]/.nuget/packages/presentationframework.fluent/9.0.0/lib/net9.0/PresentationFramework.Fluent.dll"

2. 正确初始化App应用上下文

跳过App直接加载Window会导致资源上下文缺失,必须先初始化App并合并资源字典:

# 加载并初始化App.xaml
$appXamlContent = Get-Content -Path "App.xaml" -Raw
$xmlReader = New-Object System.Xml.XmlTextReader((New-Object System.IO.StringReader($appXamlContent)))
$app = [System.Windows.Application]::LoadComponent($xmlReader)

# 手动合并Fluent主题资源(如果App.xaml里未配置的话)
$fluentDict = New-Object System.Windows.ResourceDictionary
$fluentDict.Source = New-Object System.Uri("pack://application:,,,/PresentationFramework.Fluent;component/themes/fluentdark.xaml")
$app.Resources.MergedDictionaries.Add($fluentDict)

3. 修正Main.xaml的资源引用

确保StaticResource的键名和Fluent主题中的一致,比如窗口样式用FluentWindowStyle:

<!-- Main.xaml示例代码 -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Fluent Demo" Height="450" Width="800"
        Style="{StaticResource FluentWindowStyle}">
    <Grid>
        <!-- 你的UI内容 -->
        <Button Content="Fluent Button" Style="{StaticResource FluentButtonStyle}"/>
    </Grid>
</Window>

4. 按顺序加载并启动窗口

必须等App上下文初始化完成后,再加载Window,确保资源能被正确解析:

# 加载Main.xaml窗口
$windowXamlContent = Get-Content -Path "Main.xaml" -Raw
$windowReader = New-Object System.Xml.XmlTextReader((New-Object System.IO.StringReader($windowXamlContent)))
$window = [System.Windows.Window]::LoadComponent($windowReader)

# 启动应用并显示窗口
$app.Run($window) | Out-Null

5. 常见坑点排查

  • 资源路径错误:pack://application:,,,协议不能写错,Fluent程序集的资源路径必须和程序集内的结构一致。
  • 程序集版本不匹配:必须用.NET 9版本的PresentationFramework.Fluent.dll,旧版本(.NET 6/7)在.NET 9下会加载失败。
  • PowerShell权限:执行脚本前确保权限足够,可临时执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser调整。

内容的提问来源于stack exchange,提问作者SpyNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:12:42