Ошибки с библиотекой в ​​Azure веб-приложении (Net Core on Linux) - PullRequest
0 голосов
/ 06 февраля 2020

Я разрабатываю веб-приложение, используя. Net Core и Microsoft Azure в качестве хостинга.

Сегодня я добавил этот фрагмент кода, который на моем P C отлично работает:

        try {
            using (var bitmap = new System.Drawing.Bitmap(postedFile.OpenReadStream())) { }
        } catch (Exception e) {
            Logger.LogError(e.ToString());

            return false;
        } finally {
            postedFile.OpenReadStream().Position = 0;
        }

Но на Azure это дает исключение (увиденное благодаря Logger.LogError):

        System.TypeInitializationException: The type initializer for 'Gdip' threw an exception.
    ---> System.DllNotFoundException: Unable to load shared library 'libgdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibgdiplus: cannot open shared object file: No such file or directory
      at System.Drawing.SafeNativeMethods.Gdip.GdiplusStartup(IntPtr& token, StartupInput& input, StartupOutput& output)
      at System.Drawing.SafeNativeMethods.Gdip..cctor()
     --- End of inner exception stack trace ---
      at System.Drawing.SafeNativeMethods.Gdip.GdipLoadImageFromDelegate_linux(StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, IntPtr& image)
     at System.Drawing.Image.InitializeFromStream(Stream stream)
      at System.Drawing.Bitmap..ctor(Stream stream)
      at PushMeWebServer.Utils.FileUploadCheckHelper.IsImage(IFormFile postedFile) in D:\Downloads\WorkspaceVisualStudio\PushMe_code\PushMeWebServer\PushMe\Utils\FileUploadCheckHelper.cs:line 71

Я пытался установить, используя S SH, некоторые недостающие библиотеки, такие как libc6- dev libgdiplus libx11-dev, но я не решил это. Почему? Это мой первый опыт работы в этой среде, поэтому я не эксперт

1 Ответ

0 голосов
/ 06 февраля 2020

Запускаете ли вы. NET Базовое приложение как отдельное консольное приложение или запускаете его с Azure Функции Core Tools ? Я подозреваю, что это из-за ограничений песочницы службы приложений Azure:

Ради радикального уменьшения площади поверхности атаки, песочница предотвращает почти все Win32k.sys API от вызова, что практически означает, что большинство системных вызовов User32 / GDI32 заблокированы. Для большинства приложений это не проблема, поскольку большинству веб-приложений Azure не требуется доступ к функциональности пользовательского интерфейса Windows (в конце концов, они являются веб-приложениями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...