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
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>
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>
3. Verwenden Sie eine Kompatible Druck-API
Rufen Sie auf macOS ShowPrintDialogAsync() für Druckoperationen auf, anstatt sich auf Windows-only-Druckpfade zu verlassen.
Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.