切换启动项目时 Dll 访问不起作用

Dll Access not Working When Switching Startup Projects

我目前正在开发一个使用 Ghost 脚本 DLL 的程序,方法是这样导入它:

[DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]

现在,当我将直接使用它的解决方案中的项目(位于目录...\source\repos\uo_test_viewer\omr_scanner\omrmarkengine-master)设置为启动项目时,一切正常。但是,当我将启动项目更改为位于 ...\source\repos\uo_test_viewer\UOTestViewer 的项目时,出现以下错误:

The gsdll32.dll wasn't found in the default search path or is not in correct version 

(doesn't expose required methods). Please download at least the version 8.64 from the original website.

唯一改变的是,当我将使它工作的项目设置为启动项目时,我直接 运行 它——与不工作的项目一样,我正在创建一个使用 Ghost Script 实现的对象。有人知道问题出在哪里吗?

我相信我已经提供了所有必要的信息,但如果需要更多信息,请告诉我。预先感谢您的回答!

DllImport 首先在当前工作目录中查找,然后在搜索路径($PATH)环境变量中查找。

当您在包含 Ghostscript DLL 的文件夹中启动您的应用程序时,Windows API 调用 DllImport 在当前工作目录中查找并找到 Ghostscript DLL,因此它会加载它。

当您在不包含 Ghostscript DLL 的目录中启动时,DllImport 会在当前工作目录中查找,但不会找到 DLL。然后它搜索搜索路径,这可能找不到 Ghostscript DLL,所以你得到一个错误。

您需要确保当前工作目录有 Ghostscritp DLL 的副本,或者 DLL 在搜索路径上,或者您需要在第一个参数中提供 Ghostscript DLL 的完全限定路径DllImport.

如果您正在考虑分发此应用程序,请阅读 AGPL 许可以确保您遵守使用 Ghostscript 的条款。