From Avalonia package/build targets:
EnableAvaloniaXamlCompilation.AvaloniaUseCompiledBindingsByDefault.AvaloniaXamlVerboseExceptionsAvaloniaXamlCreateSourceInfoAvaloniaXamlIlVerifyIlAvaloniaXamlAvaloniaResourceEnableAvaloniaXamlCompilation=true.AvaloniaUseCompiledBindingsByDefault=true.<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<!-- Avalonia + XAML -->
<EnableAvaloniaXamlCompilation>true</EnableAvaloniaXamlCompilation>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<!-- NativeAOT -->
<PublishAot>true</PublishAot>
<TrimMode>full</TrimMode>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
</Project>
Adjust runtime and trim settings per product requirements, but keep compiled bindings and compiled XAML as baseline.
Avalonia.Generators.props)Available knobs:
AvaloniaNameGeneratorIsEnabledAvaloniaNameGeneratorBehaviorAvaloniaNameGeneratorDefaultFieldModifierAvaloniaNameGeneratorFilterByPathAvaloniaNameGeneratorFilterByNamespaceAvaloniaNameGeneratorViewFileNamingStrategyAvaloniaNameGeneratorAttachDevToolsUse:
AvaloniaXaml (or default item inclusion picks them up).avares:// are included as AvaloniaResource.Symptoms of misconfiguration:
Treat these as design decisions, not defaults:
ReflectionBinding and reflection-driven markup bindings.RequiresUnreferencedCode/RequiresDynamicCode call chains.Default mode:
XAML-first references:
EnableAvaloniaXamlCompilationAvaloniaUseCompiledBindingsByDefaultCode-only alternative (on request):
var view = new StackPanel
{
Children =
{
new TextBlock { Text = "AOT-safe baseline" },
new Button { Content = "Run" }
}
};
window.Content = view;