Не удалось найти точку входа с именем "Environment_SetEnv" в DLL "Magick.NET-Q8-x64.Native.dll"

Обновлен до последней версии ImageMagick / Magick.NET (7.0.2.901), и он собран и работает нормально локально, но с этой ошибкой взрывается на сервере.

Не удалось найти точку входа с именем "Environment_SetEnv" в DLL "Magick.NET-Q8-x64.Native.dll".

Кажется, это новый вопрос. Судя по изменению desc здесь:

https://magick.codeplex.com/discussions/650746

Среды выполнения VC больше не требуются, поэтому их установка не будет проблемой, и я установил среды выполнения VC 2008, 2012 и 2015 для предыдущих версий библиотеки, которые работали нормально.

Windows Server 2008 64-разрядная, 64-разрядная.Net 4 в IIS.

Текущий обходной путь - откат до 7.0.0.22, который работает без ошибок.

Install-Package Magick.NET-Q8-AnyCPU -Version 7.0.0.22

ImageMagick.X64.Environment_SetEnv (имя IntPtr, значение IntPtr

3 ответа

У меня была эта проблема пару месяцев назад, и в итоге я нашел две разные причины:

  1. Конфликт AnyCPU с предыдущими версиями

    Проблема: Magick.NET кэширует собственную библиотеку во временном каталоге, если она еще не существует ( Соответствующий исходный код). Так как я ранее тестировал с версией Q8-x64 (которая не тестирует архитектуру процессора), Magick.NET-Q8-x64.Native.dll уже существовал и не был перезаписан.

    Решение. Удалите временный каталог собственной библиотеки. На моей версии Windows она находилась по адресу %TEMP%\Magick.NET.{TargetFramework}.{MagickNETVersion}, Затем версия Q8-AnyCPU извлекла новую собственную библиотеку с помощью метода Environment_SetEnv.

  2. Отсутствие разрешений в Cache Directory

    Проблема: Собственная библиотека была кэширована в каталоге с ограниченными разрешениями на выполнение кода.

    Решение: измените местоположение каталога кеша. Мое решение - следующий код.

    #if DEBUG
    private static bool MagickCacheDirectoryIsSet = false;
    
    public DefaultConstructor()
    {
        if (!MagickCacheDirectoryIsSet)
        {
            ImageMagick.MagickAnyCPU.CacheDirectory = @"path\to\more\permissive\directory";
            MagickCacheDirectoryIsSet = true;
        }
    }
    #endif
    

Следуй этим шагам:

  1. Перейти к менеджеру пакетов NuGet для решения (не проект)

  2. Удалите все предыдущие версии Magick.net

  3. Установите новую версию Magick.net для желаемых проектов

  4. Перейти к bin папку основного проекта и удалите любой файл magick.net

  5. Запустите ваше решение

Я успешно протестировал этот метод на VS2017 и Magick.net 7.6.1 (предыдущая установка была 7.4.4)

Возникла та же проблема: удаление всех магических библиотек из папки bin и переустановка решили ее.

Другие вопросы по тегам