Skip to content

After publish, AvaloniaResource disappeared. #19994

@Linlccc

Description

@Linlccc

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) + 0x1b

After the aot publish, the assets.txt content is empty, and it will normally output the resource list at other times.

To Reproduce

  1. Create an Avalonia project
  2. 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>
  1. 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(); 
}
  1. Execute dotnet publish -c Release -o bin/publish
  2. Run the released exe

Expected behavior

Normal packaging resources

Avalonia version

11.3.8

OS

Windows

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions