Programm-Icon an allen Stellen gesetzt

Das Projekt setzte nirgends ein Icon - weder <ApplicationIcon> noch
Window.Icon, und in der Web-UI kein Favicon. Auf dem Server trugen dadurch
alle unsere Anwendungen dasselbe generische Platzhalter-Icon und waren in
Explorer und Taskleiste nicht auseinanderzuhalten.

Assets/predictalytics.ico ist die einzige Quelle, alles andere daraus
abgeleitet (Ableitung und Neuerzeugung: Assets/README.md):

* <ApplicationIcon> im Shell-Projekt - Explorer, Taskleiste, Task-Manager
* Window.Icon in MainWindow und LicenseWindow; die im Code gebauten
  Dialoge erben es vom Besitzerfenster
* favicon.ico, apple-touch-icon.png und icon-192/512.png in der Web-UI,
  verlinkt aus index.html, landing.html und docs.html

Fuer das Fenstericon bewusst PNG statt ICO: Skia dekodiert kein ICO, unter
Linux waere der Fensteraufbau sonst gescheitert. Die .ico bleibt per
Exclude aus dem AvaloniaResource-Glob - sie geht ueber <ApplicationIcon>
in die Programmdatei und muss nicht zusaetzlich in die Assembly.

Der XAML-Compiler prueft Asset-URIs nicht (ein falscher Pfad baut
fehlerfrei durch), deshalb gegen die gebaute Assembly verifiziert: beide
relativen URIs loesen auf, WindowIcon dekodiert sie, der Gegentest mit
einem nicht vorhandenen Pfad schlaegt fehl.

Bugtracker: #418

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-01 13:57:48 +02:00
co-authored by Claude Opus 5
parent c75edfe841
commit 983900000a
14 changed files with 51 additions and 1 deletions
@@ -9,8 +9,18 @@
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
<!-- Icon der Programmdatei. Unter Windows das, was Explorer, Taskleiste und
Task-Manager anzeigen — ohne das traegt jede unserer Anwendungen auf dem
Server dasselbe generische Platzhalter-Icon. -->
<ApplicationIcon>Assets\predictalytics.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<!-- Fenstericon fuer Avalonia. Die .ico bleibt aussen vor: sie geht ueber
<ApplicationIcon> in die Programmdatei, und Skia dekodiert ohnehin nur PNG. -->
<AvaloniaResource Include="Assets\**" Exclude="Assets\predictalytics.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" />
<PackageReference Include="Avalonia.Desktop" />