IronPrint on macOS with .NET 8 (Apple Silicon)
Das Ausführen von IronPrint in einer .NET 8 Konsolen-App auf Apple Silicon macOS kann zur Build-Zeit mit fehlenden nativen Bibliotheken fehlschlagen, und Printer.GetPrinterNamesAsync() gibt zur Laufzeit aus.
System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.
macOS stellt libgdiplus nicht zur Verfügung, die GDI+ Implementierung, von der IronPrint und System.Drawing abhängen, und ein einfaches net8.0 Ziel aktiviert nie die macOS-spezifischen Plattform-APIs. Beide Lücken müssen geschlossen werden.
Lösung
1. Installieren Sie die native GDI+-Bibliothek
Installieren Sie libgdiplus über Homebrew, sodass die GDI+ Unterstützung, die Windows standardmäßig bietet, auf macOS verfügbar ist:
brew install mono-libgdiplus
brew install mono-libgdiplus
Ohne diese Bibliothek hat System.Drawing kein natives Backend, um darauf zuzugreifen.
2. Zielen Sie auf das macOS-Framework
Richten Sie Ihr .csproj auf das macOS-spezifische Ziel-Framework anstelle eines einfachen net8.0 aus:
<TargetFramework>net8.0-macos</TargetFramework>
<TargetFramework>net8.0-macos</TargetFramework>
Dies teilt .NET mit, die macOS-Plattform-APIs anstelle der plattformübergreifenden stubs zu verwenden.
net8.0-macos ist nicht Teil der Standard-Konsolen-App-Vorlagen. Installieren Sie die macOS-Arbeitslast oder starten Sie von einer macOS-App-Vorlage, um vorkonfigurierte Unterstützung zu erhalten.Eine vollständige Projektdatei sieht so aus:
<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. Verwenden Sie eine Kompatible Druck-API
Rufen Sie auf macOS ShowPrintDialogAsync() für Druckoperationen auf, anstatt sich auf Windows-only-Druckpfade zu verlassen.

