Azure webjob无法找到dll

本文关键字:dll webjob Azure | 更新日期: 2023-09-27 18:02:51

我有一个简单的c#控制台应用程序,使用c++ dll,它在我的PC上运行得很好。

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和所有调试文件,并将其上传到一个连续的webjob,所以它看起来像这样:https://i.stack.imgur.com/lC5p3.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,但在图像中你可以看到它就在那里,我怎么解决这个问题?

Azure webjob无法找到dll

首先,我会确保您在项目引用中引用您的dll。为此,右键单击解决方案树中的references选项卡,然后单击add reference。然后在browse下找到您的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

我通过在visual studio中更改此选项来解决此问题:项目属性->C/c++ ->代码生成->运行时库->将此选项更改为多线程(/MT)。重新构建ConsoleApplication2.dll,然后将其传递给azure,它工作了。