.NET MAUI XAML 热重载
.NET Multi-platform App UI (.NET MAUI) XAML 热重载是一项 Visual Studio 功能,可用于查看正在运行的应用中 XAML 更改的结果,而无需重新生成项目。 如果没有 XAML 热重载,每次要查看 XAML 更改结果时,都需要生成和部署应用。
当 .NET MAUI 应用连接了调试器并在调试配置下运行时,XAML 热重载会分析 XAML 编辑内容,并将相关更改发送到正在运行的应用。 由于它不会为整个页面重新创建 UI,因此会保留 UI 状态,并更新受编辑影响的控件上被更改的属性。 此外,可保持导航状态和数据,这样既可快速迭代 UI,又不影响在应用中的即时位置。 因此,可减少重新生成和部署应用以验证 UI 更改的时间。
默认情况下,无需保存 XAML 文件即可查看编辑结果。 并在键入时立即应用更新。 但在 Windows 上,可将此行为更改为仅在文件保存时更新。 具体实现方式如下:从 Visual Studio 菜单栏中选择“调试”>“选项”>“XAML 热重载”,然后在“热重载 IDE”设置中选中“文件保存时应用 XAML 热重载”复选框。 有时,如果要进行较大 XAML 更新但不希望在更新完成之前显示更新,则仅在文件保存时更新就会很有用。
注意
如果要编写本机 UWP 或 WPF 应用但不使用 .NET MAUI,请参阅 WPF 和 UWP 应用的 XAML 热重载是什么。
Visual Studio 2022 和 Visual Studio 2022 for Mac 中均可使用 XAML 热重载。 在 Windows 上,XAML 热重载可在仿真器、模拟器和物理设备上的 Android、iOS 和 WinUI 中使用。 在 Mac 上,XAML 热重载可在仿真器、模拟器和物理设备上的 Android、iOS 和 Mac Catalyst 中使用。 在所有情况下,XAML 热重载都要求将调试配置命名为 Debug
。
重要
XAML 热重载不会重载 C# 代码。 如果在代码中添加新的事件处理程序,则只能在重载代码后在 XAML 中使用。 此外,如果添加了具有 x:Name
的新 XAML 元素,则在重载代码之前,不能在代码中使用该名称。
整页重载
在某些情况下,XAML 热重载不会按预期更新正在运行的应用。 例如,可能在 .NET MAUI 控件上更改颜色属性,但在正在运行的应用中却看不到颜色更改。 若要解决此问题,可以通过单击热重载工具栏按钮或按 Alt+F10 来完全重载 XAML 文件。 仅重载已编辑的 XAML 文件。 例外情况是,如果更改资源字典文件,则将重载所有 XAML 文件,以应用新资源。
重要
重载 XAML 时,某些 UI 状态可能会丢失,例如当前焦点和选择。
启用 XAML 热重载
Visual Studio 2022 中默认启用 XAML 热重载。 如果之前已将其禁用,可从 Visual Studio 菜单栏中选择“调试”>“选项”>“XAML 热重载”,将其启用。 接下来在“选项”对话框中,确保选中“启用 XAML 热重载”、“WinUI (包括 .NET MAUI)”和“Android 和 iOS (.NET MAUI)”选项:
然后在 iOS 的生成设置中,检查“链接器”是否设置为“不链接”。
在多个平台上重载
XAML 热重载支持在 Visual Studio 中同时调试多个平台,前提是每个平台都有独立的主要项目,而不是单个项目应用。 例如,可同时部署 Android 和 iOS 目标,同时看到所做更改在两个平台上的体现。 要在 Windows 上的多个平台中调试,请参阅操作指南:设置多个启动项目。
故障排除
XAML 热重载输出中显示有助于进行故障排除的状态消息。 在 Visual Studio 中,可以通过从菜单栏中选择“查看”>“输出”,然后在“显示输出来源:”下拉列表中选择“热重载”来显示这些信息。
如果 XAML 热重载未能初始化,应确保使用的是最新版本的 .NET MAUI、最新版本的 IDE,且项目生成设置中的 iOS 链接器设置已设置为“不链接”。
XAML 热重载要求将调试配置命名为 Debug
。 如果使用自定义生成配置,则当生成配置未命名为 Debug
时,XAML 热重载会停止工作。
如果在保存 XAML 文件时没有任何反应,请确保在 IDE 中启用了 XAML 热重载。 有关详细信息,请参阅启用 XAML 热重载。
如果所作更改被 XAML 热重载分析器视为无效,它会在编辑器中用下划线来指示相关错误,并将其包含在“错误列表”窗口中。 热重载错误的错误代码以“XHR”(表示 XAML Hot Reload,即热重载)开头。 如果页面上存在任何这类错误,则在错误消除之前,XAML 热重载不会对正在运行的应用进行更改。
在 XAML 热重载会话期间,无法添加、删除或重命名文件或 NuGet 包。 如果添加或删除了文件或 NuGet 包,需重新生成并重新部署应用才能继续使用 XAML 热重载。
不支持使用 [XamlCompilation(XamlCompilationOptions.Skip)]
禁用 XAML 编译,此操作可能导致实时可视化树出现问题。 有关实时可视化树的详细信息,请参阅查看 .NET MAUI 应用的可视化树。