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>
1.4 KiB
1.4 KiB
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