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
Другие вопросы по тегам