Dllimport适用于控制台应用程序,但不适用于ASP.NET网站

时间:2014-03-21 20:13:51

标签: .net visual-studio dll .net-4.5 ghostscriptsharp

我从未使用DLL导入,所以我有一个有趣的问题。

我正在尝试在一个爱好项目中实现Ghostscript.NET。所以我创建了一个名为GhostscriptSharp的项目。这个项目有一个名为Ghostscript32.cs的文件,它可以像这样导入DLL:

        #region Hooks into Ghostscript DLL
        [DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")]
        private static extern int CreateAPIInstance(out IntPtr pinstance, IntPtr caller_handle);

        [DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]
        private static extern int InitAPI(IntPtr instance, int argc, string[] argv);

        [DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")]
        private static extern int ExitAPI(IntPtr instance);

        [DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")]
        private static extern void DeleteAPIInstance(IntPtr instance);

当我添加一个新的控制台测试项目时,引用GhostscriptSharp项目并在我的root中使用gsdll32.dll,并运行这样的程序,该程序有效:

GhostscriptWrapper.GeneratePageThumb(TEST_FILE_LOCATION, SINGLE_FILE_LOCATION, 1, 100, 100);

但是,我需要这个才能在Web项目中工作。所以我添加了根目录中的gsdll32.dll,并添加了对GhostscriptSharp项目的引用。但是,我在这里得到错误:

An exception of type 'System.DllNotFoundException' occurred in GhostscriptSharp.dll but was not handled in user code

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

任何想法如何解决这个问题?

这是我的解决方案文件夹的图片:

enter image description here

1 个答案:

答案 0 :(得分:2)

我会回答它,即使答案非常简单。

dll文件必须位于bin文件夹中的原因。如果不是默认情况。

因此我制作了以下脚本,使其正确复制到bin文件夹中:

if exist "$(TargetDir)gsdll32.dll" goto :exit
   copy "$(ProjectDir)\..\Packages\GhostscriptSharp\gsdll32.dll" "$(TargetDir)"
:exit