Dllimport работает в консольном приложении, но не на веб-сайте ASP.NET
Я никогда не работал с импортом 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, у меня в корневом каталоге находится файл gsdll32.dll и запускаю программу, подобную этой, которая работает:
GhostscriptWrapper.GeneratePageThumb(TEST_FILE_LOCATION, SINGLE_FILE_LOCATION, 1, 100, 100);
Однако мне нужно это для работы в веб-проекте. Поэтому я добавил, добавил 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)
Есть идеи как решить это?
Это изображение моей папки решений:
1 ответ
Я просто отвечу, хотя ответ очень прост.
Причина, если файл DLL должен быть в вашей папке bin. Если это не по умолчанию.
Поэтому я сделал следующий скрипт, который заставляет его правильно скопировать его в папку bin:
if exist "$(TargetDir)gsdll32.dll" goto :exit
copy "$(ProjectDir)\..\Packages\GhostscriptSharp\gsdll32.dll" "$(TargetDir)"
:exit