Я использую библиотеку Aspose PDF, основанную на System.Drawing.Common, и запускаю ее на .Net Core 2.1. в линуксе Я знаю, что это не будет работать в песочнице , поэтому я пытаюсь использовать пользовательский образ 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 Functions. Это указывает на то, что проблема заключается в среде выполнения функций Azure.
Вот пример фрагмента, который нужно добавить к ранее упомянутому Dockerfile, чтобы вместо него запустить веб-приложение:
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT [ "dotnet", "/app/WebApiProjectName.dll" ]