XAML 热重载疑难解答

适用于: Visual Studio 2019 及更高版本

此故障排除指南包含详细说明,应解决阻止 XAML 热重载正常工作的大多数问题。

WPF 和 UWP 应用支持 XAML 热重载。 有关操作系统和工具要求的详细信息,请参阅使用 XAML 热重载编写和调试正在运行的 XAML 代码

如果热重载不可用

如果在调试应用时在应用内工具栏中看到消息 Hot Reload is not available ,请按照本文中所述的说明解决问题。

验证是否启用了 XAML 热重载

默认情况下,在 Visual Studio 2019 及更高版本中启用此功能。 开始调试应用时,请确保看到应用内工具栏,该工具栏确认 XAML 热重载可用。

Visual Studio 2019:

Visual Studio 2019 中“XAML 热重载可用”工具栏的屏幕截图。

Visual Studio 2022:

Visual Studio 2022 中“XAML 热重载可用”工具栏的屏幕截图。

如果未看到应用内工具栏,请从 Visual Studio 菜单栏中选择“调试>选项>XAML 热重载”。 接下来,在“选项”对话框中,确保选中“启用 XAML 热重载”选项。

Visual Studio“调试选项”窗口的屏幕截图,其中突出显示了“启用 XAML 热重载”选项。

验证是否使用“开始调试”而不是“附加到进程”

XAML 热重载要求在应用程序启动时将环境变量ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO设置为 1 。 Visual Studio 在“调试开始调试>” (或 F5) 命令中自动设置值。 如果要改为将 XAML 热重载与“调试>附加到进程”命令一起使用,请自行设置环境变量。

注意

若要设置环境变量,请使用“开始”按钮搜索 环境变量 ,然后选择 “编辑系统环境变量”。 在打开的对话框中,选择 “环境变量”,然后将其添加为用户变量,并将值设置为 1。 若要清理,请在完成调试后删除 变量。

验证 MSBuild 属性是否正确

默认情况下,源信息包含在调试配置中。 它由项目文件中的 MSBuild 属性控制, (如 *.csproj) 。 对于 WPF,属性为 XamlDebuggingInformation,必须将其设置为 True。 对于 UWP,属性为 DisableXbfLineInfo,必须将其设置为 False。 例如:

Wpf:

<XamlDebuggingInformation>True</XamlDebuggingInformation>

UWP:

<DisableXbfLineInfo>False</DisableXbfLineInfo>

验证是否使用了正确的生成配置名称

必须手动设置正确的 MSBuild 属性以支持 XAML 热重载 (请参阅上一节) ,或者必须使用默认生成配置名称 (调试) 。 如果未正确设置 MSBuild 属性,则自定义生成配置名称将不起作用,发布版本也不起作用。

确保程序未以提升状态运行

以管理员身份运行提升/运行的应用中不支持 XAML 热重载。

验证 XAML 文件是否没有错误

如果 XAML 文件在错误列表中显示错误,则 XAML 热重载可能无法正常工作。

启用更彻底的搜索以更新 Visual Studio 2022 中的资源引用和样式

XAML_HOT_RELOAD_ACCURACY_OVER_PERF 环境变量设置为 1 可以进行更广泛的搜索,以更新 WPF 应用程序中的资源引用和样式。 请注意,某些应用程序(例如使用第三方工具包的应用程序)可能会遇到 XAML 热重载的严重延迟。 发生延迟时,状态栏中会显示热重载进度计时器编辑器。

Visual Studio 2022 中“XAML 热重载进度计时器”的屏幕截图。

已知限制

以下是 XAML 热重载的已知限制。 若要解决遇到的任何限制,只需停止调试器,然后完成操作。

限制 Wpf UWP 注意
在应用运行时将事件连接到控件 不支持 不支持 请参阅错误: 确保事件失败。 在 WPF 中,可以引用现有的事件处理程序。 在 UWP 应用中,不支持引用现有事件处理程序。
在资源字典中创建资源对象,例如在应用的 Page/Window 或 App.xaml 中创建资源对象 从 Visual Studio 2019 版本 16.2 及更高版本开始受支持 支持 示例:
- 将 添加到SolidColorBrush资源字典中以用作 StaticResource
注意:使用 XAML 热重载时,可以应用/使用写入资源字典的静态资源、样式转换器和其他元素。 仅支持创建资源。
- 更改资源字典 Source 属性。
在应用运行时向项目添加新控件、类、窗口或其他文件 不支持 不支持 None
管理 NuGet 包 (添加/删除/更新包) 不支持 不支持 None
更改使用 {x:Bind} 标记扩展的数据绑定 不适用 从 Visual Studio 2019 开始支持 这需要Windows 10版本 1809 (内部版本 10.0.17763) 及更高版本。 在 Visual Studio 2017 或早期版本中不受支持。
更改 x:Uid 指令 不适用 不支持 None
使用多个进程 支持 支持 在 Visual Studio 2019 版本 16.6 及更高版本中受支持。
主题\generic.xaml 中编辑样式 不支持 不支持 XAML 热重载创建新样式;原始样式是密封的。 平台在将 generic.xaml 中的样式应用于控件后缓存这些样式,这使得它们无法进行替换。

错误消息

使用 XAML 热重载时,可能会遇到以下错误。

错误消息 说明
确保事件失败 错误指示你正在尝试将事件连接到其中一个控件,应用程序运行时不支持该控件。
XAML 热重载不支持此更改,在调试会话期间不会应用此更改。 错误指示 XAML 热重载不支持你尝试进行的更改。 停止调试会话,进行更改,然后重启调试会话。

如果发现想要看到受支持的不受支持的方案,请使用 “建议功能 ”选项告知我们。