IronPrint on macOS with .NET 8 (Apple Silicon)
Uruchamianie IronPrint w aplikacji konsolowej .NET 8 na macOS z Apple Silicon może zakończyć się niepowodzeniem podczas kompilacji z powodu brakujących natywnych bibliotek, a Printer.GetPrinterNamesAsync() rzuca wyjątek w czasie wykonywania.
System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.
macOS nie dostarcza libgdiplus, implementacji GDI+, która jest zależna od IronPrint i System.Drawing, a docelowy net8.0 nigdy nie włącza macOS-specyficznych API platformy. Oba braki muszą zostać zamknięte.
Rozwiązanie
1. Zainstaluj natywną bibliotekę GDI+
Zainstaluj libgdiplus za pomocą Homebrew, aby GDI+ wsparcie, które Windows udostępnia domyślnie, było dostępne na macOS:
brew install mono-libgdiplus
brew install mono-libgdiplus
Bez tej biblioteki, System.Drawing nie ma żadnego natywnego zaplecza do wywołania.
2. Wskaż macOS Framework
Wskaż Twój .csproj na macOS-specyficzny framework zamiast zwykłego net8.0:
<TargetFramework>net8.0-macos</TargetFramework>
<TargetFramework>net8.0-macos</TargetFramework>
To mówi .NET, aby używał macOS platfomowych API zamiast cross-platformowych starycznych.
net8.0-macos nie jest częścią domyślnych szablonów aplikacji konsolowej. Zainstaluj obciążenie macOS lub zacznij od szablonu aplikacji macOS, aby uzyskać wstępnie skonfigurowane wsparcie.Kompletny plik projektu wygląda tak:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-macos</TargetFramework>
<Nullable>enable</Nullable>
<UseSystemDrawing>true</UseSystemDrawing>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-macos</TargetFramework>
<Nullable>enable</Nullable>
<UseSystemDrawing>true</UseSystemDrawing>
</PropertyGroup>
</Project>
3. Użyj zgodnego API drukowania
Na macOS wywołuj ShowPrintDialogAsync() dla operacji drukowania zamiast polegać na ścieżkach drukowania tylko w Windows.

