正在尝试在azure中加载未执行命令的c++dll
Trying to load unmmanaged c++ dll in azure
我正试图从我的asp.net mvc web应用程序调用我的非托管dll。当我从localhost调用这个dll时,它工作得很好。当将应用程序发布到azure并尝试调用此dll时,我得到的是:
Error:System.DllNotFoundException: Unable to load DLL 'SerenityConfigCodec.dll': A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A).
- 我成功地调用了azure中的一个简单dll(不是我的)。根据微软azure文档
- 我在我的dll上使用依赖性助行器来了解我在azure中需要的dll并添加它们
我有一些理论认为,我的dll在azure中需要一些额外的dll,而依赖行者没有告诉我。或者,我需要将我的网站连接到iis,并尝试使用iisreset来导致azure中的.bin文件夹在运行时被锁定,并让iisrese解锁它。
听起来Azure找不到您引用的DLL。
此DLL是否作为依赖项添加到您的项目中?还是作为Nuget包?。
如果是依赖项,根据您的发布方法有两种可能的解决方案:
- 如果使用Web Deploy进行发布,请将Copy Local添加为True(右键单击>从Visual Studio发布)
- 如果您通过持续集成和到存储库的链接(GitHub/Bitbucket/VSO/等)发布,将DLL文件添加到您的存储库(可能在特定的文件夹中),并使用该文件夹路径在项目中引用它
如果它是一个Nuget包,如果您使用Web Deploy(除非您将Copy Local设置为True),如果您通过Continuous Integration进行部署,Kudu将负责下载部署过程中的所有包,那么它将失败。
我通过将编译的非托管DLL文件添加到托管项目中解决了这个问题,因此它将包含在发布包中。由于添加的文件是调试或发布DLL,我不得不手动编辑.csproj文件,以有条件地复制调试或发布构建DLL,这取决于我是在构建调试还是发布托管DLL。这反过来又会在每次加载项目时生成警告,但构建器处理得很好。我需要记住重建托管DLL,让它接受对非托管DLL的更改,因为它并没有自动为我这样做。
根据您使用的VS版本,您可能还需要安装C++运行时DLL。
0x8007045A错误表示找到了DLL,但初始化失败,而0x8007007E错误提到对另一个答案的注释表示找不到要加载的DLL。
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在 Minecraft 服务器上执行命令
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 如何查看完整的CMD执行命令,包括参数和标志?
- CPP 中 z3 的编译和执行命令?
- 线程保持运行并执行命令
- 在 MinGW 和 MinGW-64 上执行命令后变量为空?
- popen() 将执行命令的输出写入 cout
- 如何在 Heroku 中的 Python 服务器上执行 "g++" 命令?
- 以普通用户身份执行命令
- 如何在生成之前在 cmake 中执行命令?
- 如何使用 c++ 在 cmd 中使用管理员权限执行命令
- 如何在Unix Shell中的后台执行命令
- 如何从连接的控制台执行命令
- 尝试在路由器上执行命令。C++ & libssh
- 在服务器上执行命令,然后将结果发送到Windows中的客户端
- 通过C编程打开终端并执行命令
- 在远程服务器上执行命令行命令
- 在Linux上使用c++执行命令时被阻止
- 使用popen执行命令