Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure函数给出错误:系统。此平台不支持绘图_Azure_.net Core_Azure Functions_.net Standard_Azure Functions Runtime - Fatal编程技术网

Azure函数给出错误:系统。此平台不支持绘图

Azure函数给出错误:系统。此平台不支持绘图,azure,.net-core,azure-functions,.net-standard,azure-functions-runtime,Azure,.net Core,Azure Functions,.net Standard,Azure Functions Runtime,(如果这个问题措词不当,有人能帮我澄清一下吗?) 我有一个Azure函数(2.0),它依赖于一些系统绘图代码。我已经添加了对System.Drawing.Common(4.5.0)的NuGet引用 但是,发布应用程序后,调用函数时,会产生以下错误: System.Private.CoreLib:执行函数时发生异常: [MyFunctionName]。System.Drawing.Common:System.Drawing不是 在这个平台上支持 据我所知,System.Drawing.Common

(如果这个问题措词不当,有人能帮我澄清一下吗?)

我有一个Azure函数(2.0),它依赖于一些系统绘图代码。我已经添加了对System.Drawing.Common(4.5.0)的NuGet引用

但是,发布应用程序后,调用函数时,会产生以下错误:

System.Private.CoreLib:执行函数时发生异常: [MyFunctionName]。System.Drawing.Common:System.Drawing不是 在这个平台上支持

据我所知,System.Drawing.Common现在在.NET Core上受支持,我相信这就是运行Azure功能的环境。不过,实际的项目是一个.NET标准2.0项目

我对如何解决这个问题感到困惑。我曾尝试将该项目转换为.NET Core 2.1项目,但这导致了与“元数据生成失败”相关的奇怪错误,并且无法找到System.Runtime


如果相关的话,我的项目将引用Microsoft.Azure.WebJobs.Extensions.EventGrid(2.0.0-beta2)。

这不是关于CLR,而是关于

绘图严重依赖GDI/GDI+来完成它的工作。由于这些API(大型攻击面)的风险性质,它们被限制在应用程序服务沙箱中

Win32k.sys(User32/GDI32)限制 为了彻底减少攻击表面积,沙箱阻止几乎所有的Win32k.sys API被调用,这实际上意味着大多数User32/GDI32系统调用被阻止。对于大多数应用程序,这不是问题,因为大多数Azure Web应用程序不需要访问Windows UI功能(它们毕竟是web应用程序)


尝试寻找一个不依赖System.Drawing/GDI的不同库,比如。

一点更新可以帮助很多人。 现在,您可以将Azure功能切换到v3: 在功能应用程序设置面板->运行时版本~3中

使用此设置,您的代码在支持Core 3的沙箱中运行(您不需要将dll重建为Core3,我运行的.net Core 2.1 dll没有错误),令人惊讶的是……您不再出现此异常:

System.Drawing.Common:此平台不支持System.Drawing

因为CLI可以在子系统中找到需要的GDI/GDI+。
现在,我可以将html转换为pdf而不会发疯。

我对幕后发生的事情有一些根本性的误解。据我所知,如果你可以参考NuGet软件包,你可以使用它提供的任何API(它们会“正常工作”)。我现在了解到,System.Drawing.Common NuGet包允许这些绘图API在支持它的平台上工作,但如果不支持,则会出现运行时异常。我也感到困惑,因为我知道我的Azure函数在Windows上运行,但正如您指出的,沙盒环境限制了GDI+用法。谢谢!使用System.Drawing.Common,如何将html转换为pdf?可以使用Puppeter之类的工具,但也不需要System.Drawing.Common。