-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Open
Labels
Description
Describe the bug
When using the target framework <TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>, AOT publishing will cause Avalonia resources to disappear.
Application: AvaloniaApplication1.exe
CoreCLR Version: 9.0.10
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.DirectoryNotFoundException: Could not find a part of the path 'F:\Assets\avalonia-logo.ico'.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String, FileMode, FileAccess, FileShare, FileOptions) + 0x17f
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String, FileMode, FileAccess, FileShare, FileOptions, Int64, Nullable`1) + 0x44
at System.IO.Strategies.OSFileStreamStrategy..ctor(String, FileMode, FileAccess, FileShare, FileOptions, Int64, Nullable`1) + 0x50
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String, FileMode, FileAccess, FileShare, FileOptions, Int64, Nullable`1) + 0xbc
at System.IO.FileStream..ctor(String, FileMode, FileAccess, FileShare, Int32, FileOptions, Int64) + 0x8a
at Avalonia.Win32.Win32Platform.LoadIcon(String) + 0x51
at Avalonia.Controls.WindowIcon..ctor(String) + 0x4c
at AvaloniaApplication1.Views.MainWindow..ctor() + 0x4d
at AvaloniaApplication1.App.OnFrameworkInitializationCompleted() + 0x117
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder, String[], Action`1) + 0x2f
at AvaloniaApplication1.Program.Main(String[] args) + 0x1bAfter the aot publish, the assets.txt content is empty, and it will normally output the resource list at other times.
To Reproduce
- Create an Avalonia project
- Modify csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup>
<ItemGroup>
<Folder Include="Models\" />
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.3.8" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.8" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.3.8" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.3.8" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Include="Avalonia.Diagnostics" Version="11.3.8">
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="Avalonia.ReactiveUI" Version="11.3.8" />
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'" Label="AOT publish">
<PublishAot>true</PublishAot>
<OptimizationPreference>Size</OptimizationPreference>
<StripSymbols>true</StripSymbols>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>full</TrimMode>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
</Project>- Modify App.axaml.cs (optional)
public override void OnFrameworkInitializationCompleted()
{
IEnumerable<Uri> v1 = AssetLoader.GetAssets(new Uri("avares://AvaloniaApplication1/"), null);
File.WriteAllLines("assets.txt", v1.Select(u => u.ToString()));
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = new MainWindowViewModel(),
};
}
base.OnFrameworkInitializationCompleted();
}- Execute
dotnet publish -c Release -o bin/publish - Run the released exe
Expected behavior
Normal packaging resources
Avalonia version
11.3.8
OS
Windows
Additional context
No response