7

升级到最新的 ImageMagick / Magick.NET (7.0.2.901),它在本地构建和运行良好,但在服务器上爆炸并出现此错误。

无法在 DLL“Magick.NET-Q8-x64.Native.dll”中找到名为“Environment_SetEnv”的入口点。

似乎是一个新问题。从这里的变化描述来看:

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

不再需要 VC 运行时,因此安装它们不会成为问题 - 而且,我已经为该库的早期版本安装了 2008、2012 和 2015 VC 运行时,效果很好。

IIS 中的 Windows Server 2008 64 位、64 位 .Net 4。

当前的解决方法是回滚到 7.0.0.22,它可以正常运行。

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

ImageMagick.X64.Environment_SetEnv(IntPtr 名称,IntPtr 值)

4

3 回答 3

8

几个月前我遇到了这个问题,最终发现了两个不同的原因:

  1. AnyCPU与以前版本冲突

    问题:Magick.NET 将本地库缓存在临时目录中,除非它已经存在相关源代码)。由于我之前使用 Q8-x64 版本(不测试 CPU 架构)进行了测试,因此Magick.NET-Q8-x64.Native.dll已经存在并且没有被覆盖。

    解决方案:删除本机库的临时目录。在我的 Windows 版本上,它位于%TEMP%\Magick.NET.{TargetFramework}.{MagickNETVersion}. 然后 Q8-AnyCPU 版本使用Environment_SetEnv方法提取了一个新的本地库。

  2. 缓存目录中缺少权限

    问题:本机库被缓存在执行代码的权限受限的目录中。

    解决方法:更改缓存目录的位置。我的解决方案是以下代码。

    #if DEBUG
    private static bool MagickCacheDirectoryIsSet = false;
    
    public DefaultConstructor()
    {
        if (!MagickCacheDirectoryIsSet)
        {
            ImageMagick.MagickAnyCPU.CacheDirectory = @"path\to\more\permissive\directory";
            MagickCacheDirectoryIsSet = true;
        }
    }
    #endif
    
于 2016-09-26T20:07:56.813 回答
1

按着这些次序:

  1. 转到解决方案 (不是项目)的 NuGet 包管理器

  2. 卸载任何以前版本的 Magick.net

  3. 将新版本的 Magick.net 安装到所需的项目

  4. 转到bin主项目的文件夹并删除任何magick.net 文件

  5. 运行您的解决方案

我在VS2017和Magick.net 7.6.1上成功测试了这个方法(之前安装的是7.4.4)

于 2018-08-29T00:15:30.870 回答
0

有同样的问题,从bin文件夹中删除所有magick dll并重新安装解决了它。

于 2016-09-11T15:26:29.430 回答