.NET 多平台应用 UI(.NET MAUI)XAML 可以被处理,并可以使用此处介绍的不同方式转换为对象树。 从 .NET 10 起,调试版本的默认设置为运行时,Release 版本的默认设置为 XamlC (XamlCompilation)。 我们鼓励你尝试源生成,并在它适合你的情况下使用它。 这将成为新项目的未来,并且很快将在所有项目中实现。
XAML 编译
XAML 使用 XAML 编译器(XAMLC)直接编译为中间语言(IL)。 XAML 编译提供了许多优势:
- 它会对 XAML 执行编译时检查,并通知你任何错误。
- 它删除 XAML 元素的一些加载和实例化时间。
- 它有助于通过不再包含 .xaml 文件来减小最终程序集的文件大小。
默认情况下,在 .NET MAUI 应用中启用 XAML 编译。 对于使用调试配置生成的应用,XAML 编译提供 XAML 的编译时验证,但不在程序集中将 XAML 转换为 IL。 相反,XAML 文件作为嵌入资源包含在应用包中,并在运行时进行评估。 对于使用发布配置生成的应用程序,XAML 编译提供了对 XAML 的编译时验证,并将 XAML 转换为写入程序集的 IL。 但是,可以用 XamlCompilationAttribute 类在两种配置中覆盖 XAML 编译行为。
重要
可以启用已编译的绑定,以提高 .NET MAUI 应用程序中的数据绑定性能。 有关详细信息,请参阅 已编译的绑定。
XAML 运行时膨胀
XAML 可以使用反射在运行时膨胀。 它具有一些优势,例如允许热重载方案、缩短生成时间,允许向 IDE 报告诊断。 通常应尽量避免使用此方法,因为它不仅是最慢的,而且语法错误只有在运行时才能被捕获。
XAML 源生成
从 .NET 10 开始,XAML 可以在编译时转换为 C# 代码。 它具有以下优点:
- 一致性:调试和发布中使用的相同生成的代码
- 速度:设备上的加载时间在调试模式下速度提高到 10000%(快 100 倍),在发布版本中速度提升 25%。 分配量按相同比例减少
- 调试:可以看到生成的代码,可以中断和调试它。
推荐的未来做法是这样的。 它将在将来默认启用。
启用源生成,并针对每个文件设置
我们不再建议使用 [XamlCompilation] 属性来启用或禁用每个文件编译。
通过在 csproj 文件中将值设置为MauiXamlInflatorSourceGen如下所示,可以在项目级别启用 XAML 源生成:
<MauiXamlInflator>SourceGen</MauiXamlInflator>
将对发布和调试配置中的所有文件使用源生成。
可以还原为每个文件的默认设置(或使用通配符),或者强制使用其他解压算法。
<ItemGroup>
<MauiXaml Update="MyFile.xaml" Inflator="SourceGen" /> <!-- enable sourcegen on a single file. prefer setting it at project level -->
<MauiXaml Update="Controls\**.xaml" Inflator="Default" /> <!-- revert to defaults for all XAML in Controls. as of .NET 10, default is XamlC for Release, Runtime for Debug -->
<MauiXaml Update="Controls\**.xaml" Inflator="Runtime" /> <!-- force runtime inflation. if you have to do this, it probably indicates a bug in both XamlC and sourcegen, please report -->
</ItemGroup>
有其他元数据可以设置来指示 XAML SourceGenerator
<ItemGroup>
<MauiXaml Update="MyFile.xaml" Inflator="SourceGen" NoWarn="0612;0618" /> <!-- prevent the compiler to fail if the xaml use deprecated API -->
</ItemGroup>