我正在使用一个依赖于System.Drawing.Common的Aspose PDF库,并在.Net Core 2.1上运行它。在Linux上。我知道这在sandbox中不起作用,所以我尝试使用自定义Docker映像(按照Aspose的指示安装libgdiplus,libc6-dev和ttf-mscorefonts-installer)。>
我让它在作为Web应用程序的dockerized Web API中工作,但是当用作Azure函数时,调用失败,并显示PlatformNotSupportedException:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时发生异常:xxx ---> System.PlatformNotSupportedException:该平台不支持System.Drawing。
相关问题#1和#2类似,但是它们不使用自定义Docker映像。
这个问题的实质是:使用自定义Docker映像时,对System.Drawing.Common的沙箱限制也适用吗?
作为参考,这是Dockerfile中的运行时映像部分:
FROM mcr.microsoft.com/azure-functions/dotnet:2.0
#libgdiplus, libc6-dev and ttf-mscorefonts are for the aspose library
# sources.list manipulation and eula acceptance stuff is for ttf-mscorefonts
RUN sed -i "s/main/main contrib/g" /etc/apt/sources.list \
&& echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections \
&& apt-get update \
&& apt-get install -y --no-install-recommends libgdiplus libc6-dev ttf-mscorefonts-installer
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
更新: 在Azure Functions泊坞映像中的.Net Core Web应用程序中运行相同的PDF操作代码即可。这表明问题出在Azure Functions运行时之内。
以下是添加到前面提到的Dockerfile中以使其运行Web App的示例代码片段:
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT [ "dotnet", "/app/WebApiProjectName.dll" ]
答案 0 :(得分:0)
无论基础平台如何,Azure Functions运行时似乎都存在一些限制。一个有效的猜测是,限制与Azure Web Apps相同。以下是在函数中使用System.Drawing.Common的简化测试用例,当在Windows上本地运行时,该用例也将失败:
[FunctionName("MatrixTester")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req)
{
try
{
new Matrix(1, 2, 3, 4, 5, 6);
}
catch (PlatformNotSupportedException pnse)
{
return new OkObjectResult("Matrix not supported. Details: " + pnse);
}
return new OkObjectResult("Matrix is supported on this platform");
}