web-dev-qa-db-ja.com

Azure Functionでエラーが発生します:System.Drawingはこのプラットフォームではサポートされていません

(この質問の言い回しが不十分な場合、誰かがそれを解決するのを手伝ってもらえますか?)

System.Drawingコードに依存するAzure Function(2.0)があります。 System.Drawing.Common(4.5.0)へのNuGet参照を追加しました。

ただし、アプリを公開した後、関数が呼び出されると、エラーが生成されます。

System.Private.CoreLib:関数の実行中の例外:[MyFunctionName]。 System.Drawing.Common:System.Drawingはこのプラットフォームではサポートされていません。

私の知る限り、System.Drawing.Commonは現在.NET Coreでサポートされています。これは、Azure Functionが実行されている環境だと思います。ただし、実際のプロジェクトは.NET Standard 2.0プロジェクトです。

私はこれを解決する方法について混乱しています。プロジェクトを.NET Core 2.1プロジェクトに変換しようとしましたが、「メタデータの生成に失敗しました」に関連する奇妙なエラーが発生し、System.Runtimeが見つかりませんでした。

私のプロジェクトは、Microsoft.Azure.WebJobs.Extensions.EventGrid(2.0.0-beta2)を参照します(関連がある場合)。

13
vargonian

CLRの問題ではなく、 sandbox の問題です。

System.Drawingはその処理をGDI/GDI +に大きく依存しています。これらのAPIには多少危険な性質があるため(大きな攻撃対象領域)、App Serviceサンドボックスで制限されています。

Win32k.sys(User32/GDI32)の制限

根本的な攻撃対象領域を減らすために、サンドボックスはほとんどすべてのWin32k.sys APIが呼び出されるのを防ぎます。これは実質的にUser32/GDI32システムコールのほとんどがブロックされることを意味します。ほとんどのAzure Web AppsはWindows UI機能へのアクセスを必要としないため(これはWebアプリケーションです)、問題ではありません。

ImageSharp のように、System.Drawing/GDIに依存しない別のライブラリを見つけてください。

18
evilSnobu