azure webjob 找不到 dll
azure webjob can't find dll
我有一个使用 c++ dll 的简单 c# 控制台应用程序,它在我的 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,所以它看起来像这样:http://i.imgur.com/wWfE6lG.png
当 运行 inside 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 但在图像中你可以看到它就在那里,我该如何解决这个问题?
首先,我会确保您在项目引用中有对您的 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>
我通过更改 visual studio 这个选项解决了这个问题:project propertires->C/C++->Code Generation->Runtime Library-> 将这个选项更改为 Multi-threaded(/MT ).再次重建 ConsoleApplication2.dll 然后将其传递给 azure 并且成功了。
我有一个使用 c++ dll 的简单 c# 控制台应用程序,它在我的 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,所以它看起来像这样:http://i.imgur.com/wWfE6lG.png 当 运行 inside 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 但在图像中你可以看到它就在那里,我该如何解决这个问题?
首先,我会确保您在项目引用中有对您的 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>
我通过更改 visual studio 这个选项解决了这个问题:project propertires->C/C++->Code Generation->Runtime Library-> 将这个选项更改为 Multi-threaded(/MT ).再次重建 ConsoleApplication2.dll 然后将其传递给 azure 并且成功了。