macOSにおけるIronPrintと.NET 8 (Apple Silicon)
Apple Silicon macOS上で.NET 8コンソールアプリでIronPrintを実行すると、ビルド時にネイティブライブラリが欠落していて失敗し、Printer.GetPrinterNamesAsync()がランタイムでスローされることがあります。
System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.
macOSには、IronPrintとnet8.0ターゲットはmacOS専用のプラットフォームAPIを有効にしません。これらのギャップは埋める必要があります。
解決策
1. ネイティブGDI+ライブラリをインストールする
Homebrewを通じてlibgdiplusをインストールし、Windowsがデフォルトで提供するGDI+サポートをmacOSで利用可能にします:
brew install mono-libgdiplus
brew install mono-libgdiplus
このライブラリがないと、System.Drawingは呼び出すためのネイティブバックエンドがありません。
2. macOS Frameworkをターゲットにする
通常の.csprojを向けます:
<TargetFramework>net8.0-macos</TargetFramework>
<TargetFramework>net8.0-macos</TargetFramework>
これは.NETにクロスプラットフォームのスタブではなくmacOSのプラットフォームAPIを使用させます。
コマンドラインテンプレートには一部にnet8.0-macosが含まれていません。 macOSワークロードをインストールするか、macOSアプリアプリケーションテンプレートから開始して事前設定されたサポートを得ることができます。
完全なプロジェクトファイルはこのように見えます:
<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. 互換性のある印刷APIを使用する
macOSでは、Windows専用の印刷パスに依存せずにShowPrintDialogAsync()を印刷操作のために呼び出します。

