Я использую PDF-библиотеку Aspose, основанную на System.Drawing.Common, и запускаю ее на .Net Core 2.1. в Linux. Я знаю, что это не будет работать в песочнице, поэтому я пытаюсь использовать собственный образ Docker (устанавливаю libgdiplus, libc6-dev и ttf-mscorefonts-installer, как указано, например, в Aspose).
Я заставил его работать в докеризованном веб-API в качестве веб-приложения, но при использовании в качестве функции Azure вызовы завершаются с ошибкой PlatformNotSupportedException:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: исключение при выполнении функции: xxx ---> System.PlatformNotSupportedException: System.Drawing не поддерживается на этой платформе.
Связанные вопросы # 1 и # 2 похожи, но они не используют собственный образ Docker.
Суть этого вопроса заключается в следующем: применяются ли ограничения песочницы для System.Drawing.Common также при использовании пользовательского образа Docker?
Для справки, вот раздел образа среды выполнения из 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"]
Обновление: работает тот же код обработки PDF-файлов в веб-приложении .Net Core в образе докера «Функции Azure». Это указывает на то, что проблема связана со средой выполнения Функций Azure.
Вот пример фрагмента, который нужно добавить в ранее упомянутый Dockerfile, чтобы вместо этого он запускал веб-приложение:
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT [ "dotnet", "/app/WebApiProjectName.dll" ]