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 热重载要求在应用程序启动时将环境变量设置为1该环境变量ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO。 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 及更高版本开始受支持 支持 示例:
- 将 a SolidColorBrush 添加到资源字典中以用作 .StaticResource
注意:使用 XAML 热重载时,可以应用/使用写入资源字典的静态资源、样式转换器和其他元素。 不支持仅创建资源。
- 更改资源字典的 Source 属性。
在应用运行时向项目添加新控件、类、窗口或其他文件 不支持 不支持
管理 NuGet 包(添加/删除/更新包) 不支持 不支持
更改使用 {x:Bind} 标记扩展的数据绑定 空值 从 Visual Studio 2019 开始受支持 这需要 Windows 10 版本 1809(内部版本 10.0.17763)及更高版本。 在 Visual Studio 2017 或更低版本中不受支持。
更改 x:Uid 指令 空值 不支持
使用多个进程 支持 支持 在 Visual Studio 2019 版本 16.6 以及更高版本中受支持。
在主题\generic.xaml 中 编辑样式 不支持 不支持 XAML 热重载创建新样式;原始样式是密封的。 平台将泛型.xaml 中的样式应用于控件后缓存样式,这使得它们不可替换。

错误消息

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

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

如果发现想要得到支持却不受支持的情况,请通过使用建议功能选项告知我们。