1

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

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

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

无法加载 DLL 'gsdll32.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

我可以说这里有两个问题

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

是否有任何建议可以在 Azure 部署中发挥作用?

4

2 回答 2

4

只需在测试站点的 Azure 网站部署上解决此问题。我们仅将 GhostScriptSharp 用于缩略图功能,还没有弄清楚如何使用 Ghostscript.NET 来做同样的事情,因为实际示例很简单。

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

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

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

例如使用声明它

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

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

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

在此之后,它又开始工作了。

于 2015-12-23T10:35:23.100 回答
-1

您可能缺少一些存在于开发机器上的 Windows 运行时 DLL。这些将需要包含在您的 Azure 部署中。

于 2014-07-02T14:00:19.963 回答