我试图从我的asp.net mvc网络应用程序调用我的非托管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).
我有一些理论认为我的dll需要一些额外的dll,因为依赖步行者不会告诉我它们。 或者我可能需要将我的网站连接到iis并尝试使用iisreset导致azure中的.bin文件夹在运行时锁定并让iisreset解锁。
答案 0 :(得分:0)
听起来Azure无法找到您引用的DLL。
此DLL是否在项目中作为依赖项添加?还是作为Nuget包裹?。
如果是依赖关系,则有两种可能的解决方案,具体取决于您的发布方法:
如果是Nuget软件包,如果您使用Web Deploy,它将失败(除非您将Copy Local设置为True),如果您通过Continuous Integration进行部署,Kudu会负责下载部署过程中的所有软件包。
答案 1 :(得分:0)
我通过将已编译的非托管DLL文件添加到托管项目来解决了这个问题,因此它将包含在发布包中。由于添加的文件是调试版或发布版DLL,我必须手动编辑.csproj文件,以有条件地复制调试版或发布版DLL,具体取决于我是否构建调试或发布托管DLL。这反过来每次加载项目时都会生成警告,但构建器会正确处理它。我需要记住重建托管DLL以使其能够接收对非托管DLL的更改,因为它并没有自动为我做这些。
根据您使用的VS版本,您可能还需要安装C ++运行时DLL。
0x8007045A错误表示找到了DLL但init失败,而0x8007007E错误提到对另一个回答的注释表明它无法找到要加载的DLL。