Files
Predictalytics/src/Predictalytics.Shell/Assets
RichardandClaude Opus 5 983900000a 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>
2026-09-01 13:57:48 +02:00
..

Programm-Icon

predictalytics.ico ist die einzige Quelle. Alles andere ist daraus abgeleitet:

Datei Wozu
predictalytics.ico (9 Größen, 16–256) <ApplicationIcon> in Predictalytics.Shell.csproj — Explorer, Taskleiste, Task-Manager unter Windows
predictalytics.png (256) Window.Icon in MainWindow.axaml und LicenseWindow.axaml; Dialoge erben es vom Besitzerfenster. Bewusst PNG, weil Skia unter Linux kein ICO dekodiert
Predictalytics.Api/wwwroot/favicon.ico (16–48) Browser-Tab der Web-UI
Predictalytics.Api/wwwroot/apple-touch-icon.png (180) iOS-Homescreen
Predictalytics.Api/wwwroot/icon-192.png, icon-512.png Verlinkt aus index.html, landing.html, docs.html

Ersetzt du das Icon, tausche predictalytics.ico aus und erzeuge den Rest neu:

python - <<'PY'
from PIL import Image
src = 'src/Predictalytics.Shell/Assets/predictalytics.ico'
im = Image.open(src); im.size = (256, 256); im.load(); im = im.convert('RGBA')
im.save('src/Predictalytics.Shell/Assets/predictalytics.png', optimize=True)
im.save('src/Predictalytics.Api/wwwroot/favicon.ico',
        sizes=[(16,16),(24,24),(32,32),(48,48)])
for n, name in [(180,'apple-touch-icon.png'), (192,'icon-192.png'), (512,'icon-512.png')]:
    im.resize((n,n), Image.LANCZOS).save(f'src/Predictalytics.Api/wwwroot/{name}', optimize=True)
PY