web-dev-qa-db-fra.com

La fonction Azure donne une erreur: System.Drawing n'est pas pris en charge sur cette plate-forme

(Si cette question est mal formulée, quelqu'un pourrait-il m'aider à l'éclaircir?)

J'ai une fonction Azure (2.0) qui s'appuie sur du code System.Drawing. J'ai ajouté une référence NuGet à System.Drawing.Common (4.5.0).

Cependant, après la publication de l'application, lorsque la fonction est appelée, elle génère l'erreur:

System.Private.CoreLib: exception lors de l'exécution de la fonction: [MyFunctionName]. System.Drawing.Common: System.Drawing n'est pas pris en charge sur cette plate-forme.

Pour autant que je sache, System.Drawing.Common est désormais pris en charge sur .NET Core, qui, je crois, est l'environnement dans lequel ma fonction Azure s'exécute. Le projet réel est cependant un projet .NET Standard 2.0.

Je ne sais pas comment résoudre ce problème. J'ai essayé de convertir le projet en un projet .NET Core 2.1, mais cela a conduit à des erreurs bizarres liées à "la génération de métadonnées a échoué" et à une incapacité à trouver System.Runtime.

Mon projet fait référence à Microsoft.Azure.WebJobs.Extensions.EventGrid (2.0.0-beta2) si cela est pertinent.

13
vargonian

Il ne s'agit pas du CLR, il s'agit du bac à sable .

System.Drawing s'appuie fortement sur GDI/GDI + pour faire son travail. En raison de la nature quelque peu risquée de ces API (grande surface d'attaque), elles sont limitées dans le sandbox App Service.

Restrictions de Win32k.sys (User32/GDI32)

Dans un souci de réduction radicale de la surface d'attaque, le bac à sable empêche la quasi-totalité des API Win32k.sys d'être appelées, ce qui signifie pratiquement que la plupart des appels système User32/GDI32 sont bloqués. Pour la plupart des applications, ce n'est pas un problème car la plupart des applications Web Azure ne nécessitent pas l'accès aux fonctionnalités de l'interface utilisateur Windows (ce sont des applications Web après tout).

Essayez de trouver une bibliothèque différente qui ne repose pas sur System.Drawing/GDI, comme ImageSharp .

18
evilSnobu