IronPrint on macOS with .NET 8 (Apple Silicon)

This article was translated from English: Does it need improvement?
Translated
View the article in English

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
SHELL

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>
XML

To mówi .NET, aby używał macOS platfomowych API zamiast cross-platformowych starycznych.

Ostrzeżenienet8.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>
XML

3. Użyj zgodnego API drukowania

Na macOS wywołuj ShowPrintDialogAsync() dla operacji drukowania zamiast polegać na ścieżkach drukowania tylko w Windows.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 44,051 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Chcesz szybkiego dowodu? PM > Install-Package IronPrint
uruchom próbkę obserwuj, jak twój dokument trafia do drukarki.