Лазурная веб-работа не может найти dll

У меня есть простое консольное приложение C#, которое использует dll C++, оно отлично работает на моем ПК.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        [DllImport("ConsoleApplication2.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int mainn();

        static void Main(string[] args)
        {
            int num = mainn();
        }
    }
}

Я заархивировал это консольное приложение с его dll и всеми файлами отладки и загрузил его в непрерывное веб-задание, чтобы оно выглядело так: http://i.imgur.com/wWfE6lG.png при запуске внутри Azure возникает эта ошибка:

[07/15/2015 22:10:49 > 223c43: SYS INFO] Run script 'ConsoleApplication1.exe' with script host - 'WindowsScriptHost'
[07/15/2015 22:10:49 > 223c43: SYS INFO] Status changed to Running
[07/15/2015 22:10:49 > 223c43: ERR ] 
[07/15/2015 22:10:49 > 223c43: ERR ] Unhandled Exception: System.DllNotFoundException: Unable to load DLL 'ConsoleApplication2.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
[07/15/2015 22:10:49 > 223c43: ERR ]    at ConsoleApplication1.Program.mainn()
[07/15/2015 22:10:49 > 223c43: ERR ]    at ConsoleApplication1.Program.Main(String[] args) in c:\Users\Juan Jose\Desktop\NAT middleman\ConsoleApplication1\Program.cs:line 17
[07/15/2015 22:10:49 > 223c43: SYS ERR ] Job failed due to exit code -532462766
[07/15/2015 22:10:49 > 223c43: SYS INFO] Process went down, waiting for 60 seconds

что означает, что он не может найти ConsoleApplication2.dll, но на изображении, которое вы видите, он находится прямо там, как это исправить?

3 ответа

Решение

Я решил эту проблему, изменив в Visual Studio этот параметр: свойства проекта->C/C++-> Генерация кода-> Библиотека времени выполнения-> измените этот параметр на Многопоточный (/MT). Снова перестроил ConsoleApplication2.dll, затем передал его в Azure, и он заработал.

Сначала я бы удостоверился, что у вас есть ссылка на вашу dll в ссылках проекта. Для этого щелкните правой кнопкой мыши вкладку ссылок в дереве решений и нажмите кнопку Добавить ссылку. Затем при просмотре найдите свою dll и проверьте ее в своем проекте. Если его уже там проверил, то вы ссылались на свою DLL. Тогда я бы проверил вашу dll и убедился, что она не только для чтения.

Надеюсь это поможет;)

Сначала я бы попытался установить среду для текущего каталога:

Environment.CurrentDirectory

Если это не сработает, я вернусь к элементу исследования в вашем app.config.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

ссылка: https://msdn.microsoft.com/en-us/library/823z9h8w.aspx

Другие вопросы по тегам