我认为同一问题有两种症状。
我已使用 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/