正在尝试在azure中加载未执行命令的c++dll

Trying to load unmmanaged c++ dll in azure

本文关键字:执行 命令 c++dll azure 加载      更新时间:2023-10-16

我正试图从我的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).

  1. 我成功地调用了azure中的一个简单dll(不是我的)。根据微软azure文档
  2. 我在我的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。