2016-03-17 10 views
0

У меня есть приложение C# mvc, которое использует dll C++ для некоторых более тяжелых статистических вычислений. Все отлично работает, когда я запускаю его на месте, но на моем развернутом приложении все, что я получаюНе удается получить доступ к DLL-файлу в развернутом проекте C# mvc

Исключения: Невозможно загрузить DLL ' HandCalculatorDll.dll ': Указанный модуль не может быть найден. (Исключение из HRESULT: 0x8007007e)

C# модель использует

[DllImport("HandCalculatorDll.dll", CallingConvention = CallingConvention.Cdecl)] 
    public static extern bool CalculateWinner(int[] req); 
    public RoundResult CalculateWinnerDll(List<Hand> hands, List<Card> board) 
    { 
     // set up the request 
     // calls the dll 
     var success = CalculateWinner(reqArr); 
     // interpret the response 
     return result; 
    } 

Я пытался несколько различных вещей, но ничего, кажется, работает для проекта в развертывается. Я попробовал как добавить dll в проект, так и удалить его из проекта (на основе разных рекомендаций). Я пробовал несколько вариантов относительных и абсолютных путей. Я использовал

System.Web.Hosting.HostingEnvironment.MapPath("/bin"); 

найти abolute путь на хостинг ПК, поставил DLL в том, что бен папку, и использовать этот путь в качестве атрибута DllImport.

К сожалению, большинство рекомендаций/решений, которые я нашел, работают только для локальной отладки. Кто-нибудь знает, как это исправить?

UPDATE Я скопировал весь проект на другой компьютер, чтобы запустить его, и что компьютер бросает ту же «Не удается загрузить DLL» ошибку, которая возникает, когда я публикую. Я запускаю все то же самое на втором компьютере, как на моем домашнем компьютере, и я подтвердил, что файл есть. Теперь я действительно смущен ...

+0

Просто убедитесь, что вы включили эту DLL в свой проект VS? И если да, задали ли вы его свойства так, чтобы они были скопированы в выходной каталог при сборке? –

+0

Да, я пробовал в обоих направлениях. Нет кубиков ... – nurdyguy

+0

После публикации ваша dll в папке bin или нет? И ваша dll 32bit? Попробуйте настроить свой веб-проект на x86 или настроить пул приложений на 32 бит в IIS. – Chris

ответ

0

Попробуйте щелкнуть правой кнопкой мыши по ссылке в вашем проекте, щелкнуть по свойствам и убедиться, что она настроена на копирование локально.

+0

В настоящее время у меня есть каталог «Копировать в выходной каталог» для «Копировать», если он более новый, но я не уверен, что это то, о чем вы говорите. – nurdyguy

+0

Звучит правильно. Другое дело - убедиться, что папка, в которой находится ваша DLL, находится в вашем проекте. Причина, когда вы публикуете, будет копировать только папки в проекте на сервер –

+0

Я пробовал несколько вариантов, включая запуск DLL из основной папки проекта. Ничто не работает. – nurdyguy