diff --git a/src/UniGetUI.Avalonia/Models/PackageCollections.cs b/src/UniGetUI.Avalonia/Models/PackageCollections.cs
index 125c99342..597d48a8f 100644
--- a/src/UniGetUI.Avalonia/Models/PackageCollections.cs
+++ b/src/UniGetUI.Avalonia/Models/PackageCollections.cs
@@ -201,6 +201,13 @@ private async Task LoadIconAsync()
if (uri.IsFile)
{
+ if (!IsSkiaDecodableExtension(uri.LocalPath))
+ {
+ // Avalonia's Bitmap (Skia) can't decode SVG/AVIF/ICO/TIFF — the
+ // icon cache may produce those. Reject upfront so we don't throw.
+ _iconCache[hash] = null;
+ return;
+ }
bitmap = await Task.Run(() => new Bitmap(uri.LocalPath)).ConfigureAwait(false);
}
else if (uri.Scheme is "http" or "https")
@@ -223,6 +230,17 @@ private async Task LoadIconAsync()
catch { _iconCache[hash] = null; }
}
+ private static bool IsSkiaDecodableExtension(string path)
+ {
+ string ext = Path.GetExtension(path);
+ return ext.Equals(".png", StringComparison.OrdinalIgnoreCase)
+ || ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase)
+ || ext.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)
+ || ext.Equals(".gif", StringComparison.OrdinalIgnoreCase)
+ || ext.Equals(".bmp", StringComparison.OrdinalIgnoreCase)
+ || ext.Equals(".webp", StringComparison.OrdinalIgnoreCase);
+ }
+
private void Package_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(Package.Tag))
diff --git a/src/UniGetUI.PackageEngine.PackageEngine/UniGetUI.PackageEngine.PEInterface.csproj b/src/UniGetUI.PackageEngine.PackageEngine/UniGetUI.PackageEngine.PEInterface.csproj
index ccfcb2527..c614e9d7d 100644
--- a/src/UniGetUI.PackageEngine.PackageEngine/UniGetUI.PackageEngine.PEInterface.csproj
+++ b/src/UniGetUI.PackageEngine.PackageEngine/UniGetUI.PackageEngine.PEInterface.csproj
@@ -24,20 +24,49 @@
-
-
-
-
-
+
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
-
-
-
-
-
-
-
+
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
@@ -47,4 +76,4 @@
-
+
\ No newline at end of file