var*_*ian 16 azure .net-core azure-functions .net-standard azure-functions-runtime
(如果这个问题措辞不够,有人可以帮我清理一下吗?)
我有一个Azure功能(2.0),它依赖于一些System.Drawing代码.我添加了一个NuGet引用System.Drawing.Common(4.5.0).
但是,在发布应用程序后,调用该函数时,会产生错误:
System.Private.CoreLib:执行函数时出现异常:[MyFunctionName].System.Drawing.Common:此平台不支持System.Drawing.
据我所知,现在.NET Core支持System.Drawing.Common,我相信我的Azure功能正在运行的环境.但实际项目是.NET Standard 2.0项目.
我很困惑如何解决这个问题.我已经尝试将项目转换为.NET Core 2.1项目,但这导致了与"元数据生成失败"相关的奇怪错误,并且无法找到System.Runtime.
我的项目引用了Microsoft.Azure.WebJobs.Extensions.EventGrid(2.0.0-beta2),如果这是相关的.
evi*_*obu 21
它不是关于CLR,而是关于沙箱.
System.Drawing在很大程度上依赖于GDI/GDI +来做它的事情.由于这些API(大型攻击面)的风险性有限,因此它们在App Service沙箱中受到限制.
Win32k.sys(User32/GDI32)限制
为了减少激进的攻击面积,沙盒可以防止几乎所有的Win32k.sys API被调用,这实际上意味着大多数User32/GDI32系统调用都被阻止了.对于大多数应用程序而言,这不是问题,因为大多数Azure Web应用程序不需要访问Windows UI功能(毕竟它们是Web应用程序).
尝试找到一个不依赖于System.Drawing/GDI的不同库,比如ImageSharp.
一点更新可以帮助很多人。现在,您可以将 Azure Function 切换到 v3:在 Function 应用程序设置面板 -> 运行时版本 ~3 中
通过此设置,您的代码在支持 Core 3 的沙箱中运行(您不需要将 dll 重建为 Core3,我运行我的 .net core 2.1 dll 没有错误),令人惊讶的是...您没有得到这个例外不再是:
System.Drawing.Common:此平台不支持 System.Drawing。
因为CLI可以在子系统中找到需要的GDI/GDI+。现在我可以将 html 转换为 pdf 而不会发疯。
归档时间: |
|
查看次数: |
3947 次 |
最近记录: |