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

时间:2016-08-24 15:29:49

标签: magick.net imagemagick.net

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

  

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

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

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

不再需要VC运行时,因此安装它们不会成为问题 - 并且,我已经为该库的先前版本安装了2008年,2012年和2015年的VC运行时,运行良好。 / p>

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 name, IntPtr value)

3 个答案:

答案 0 :(得分:5)

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

  1. AnyCPU与先前版本冲突

    问题:Magick.NET将本机库缓存在临时目录中,除非它已经存在Relevant source code)。由于我之前已使用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
    

答案 1 :(得分:0)

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

答案 2 :(得分:0)

请按照以下步骤操作:

  1. 转到NuGet软件包管理器以获取解决方案(不是项目)

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

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

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

  5. 运行您的解决方案

我已在VS2017和Magick.net 7.6.1(先前的安装为7.4.4)上成功测试了此方法