c# - Azure 上的 GhostScriptSharp

标签 c# azure nuget ghostscript ghostscriptsharp

我认为同一问题有两种症状。

我已使用 Nuget 安装了 GhostScriptSharp,并在 Azure Development Fabric 中的 32 位机器上本地运行它。一切都运转良好。

当我部署到 64 位 Azure 时,我收到以下错误消息。

Unable to load DLL 'gsdll32.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

据我所知,这里有两个问题

  • 该项目不是使用 64 位 GhostScriptSharp.cs 构建的
  • 无论构建如何,gsdll32.dll 或 gsdll64.dll 都不会被复制到正确的文件夹中。

是否有任何建议可以使其在 Azure 部署上运行?

最佳答案

只需在测试站点的 Azure 网站部署上解决此问题。我们仅使用 GhostScriptSharp 来实现缩略图功能,尚未弄清楚如何使用 Ghostscript.NET 执行相同的操作,因为实际示例很少。

该错误消息略有误导性。该文件没有丢失,它只是没有对 DLL 文件所在文件夹(例如您的 BIN 文件夹)的读/写访问权限。

如果您在 VM 上运行,您可以授予对 BIN 文件夹的读/写访问权限(轻微的安全问题),但在免费的 Azure 网站上您没有该控制权。

我们的解决方案是将 gsdll32.dll 和 gsdll64.dll 文件放入 App_Data 文件夹(该文件夹已具有读/写访问权限),并将该文件夹添加到使用 Win32 搜索 DLL 的位置内核SetDllDirectory函数。

例如使用声明它

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);

然后,在调用 GhostscriptSharp 方法之前,例如在 Controller 方法中,使用以下命令将 App_Data 文件夹添加到 DLL 搜索路径:

SetDllDirectory(Server.MapPath("~/App_Data/"));

此后它又开始工作了。

关于c# - Azure 上的 GhostScriptSharp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519908/

相关文章:

c# - Entity Framework OfType()

azure - Azure 可以编译 TypeScript 并执行 Gulp 任务吗?

azure - 删除子网失败

Azure 开发运营 : Can not load nuget package from feed in Azure Pipeline

asp.net - 错误的 System.Web.Mvc 更新

c# - .NET 的线程安全缓冲区

c# - 计时器经过事件在 C# 命令行程序中触发两次

powershell - NuGet init.ps1 执行两次

c# - 在当前不需要时实现 INotifyPropertyChanged 是一种好习惯吗?

Azure CPU 性能基准和/或规范