Windows Azure未找到C ++ / CLI项目的DLL

我有一个包含非托管C压缩库的C ++ / CLI项目,该项目由调用C ++ Compress函数的MVC3项目引用。

一切都在本地工作正常,但当我将解决方案发布到Azure云时,我得到一个错误,说它无法找到模块/ dll:

无法加载文件或程序集“LZGEncoder.DLL”或其依赖项之一。 指定的模块无法找到。

为什么找不到DLL文件? 它是错误的地方还是正在编译? 有什么方法可以检查吗? 谢谢!

问题是云端缺少Visual C ++ 2010 Runtime库。

我所做的是将Visual C ++ 2010 Redistributable包添加到项目中,以及在启动时静默安装它的脚本,现在是本机dll的工作。 如果你使用的是原生C dll,你也需要这个。

脚步:

1) 下载Visual C ++ 2010 Redistributable Package ,并将其添加到您的项目中。

2)创建一个新的批处理文件并将其添加到它:
vcredist_x64.exe /q /norestart
exit /b 0

3)打开ServiceDefinition.csdef文件并将其添加到相关的WebRole元素下:

    

更新:
Visual C ++ 2012已经完成并且相同的脚本可以运行,但是每个人都应该确保Azure运行至少Windows Server 2008 R2 ,否则启动任务将挂起并且角色永远不会启动(直到您在任务管理器中终止vcredist进程)通过RDP)。

如果要validationAzure VM上的内容,只需尝试解压缩CSPKG文件,然后再解压缩.CSSX文件(只需将CSSX重命名为zip)并匹配每个引用都在那里。 这样您就可以匹配VM上的内容。 validationVS中缺少的DLL后,选择参考DLL并将其属性“Copy Local”设置为“True”。

您需要将所有dll放在实时服务器上存在的文件夹中。 如果您从本地添加引用并且该实时不存在该位置,则无法在实时上构建代码。 因此,在实时部署代码之前,请确保所有dll都存在于实时。

确保C ++ dll和非托管C库(如果它是.dll而不仅仅是源代码)都包含在服务包中,并确保编译器将C ++库转储到正确的位置。 这篇文章有一个不错的演练。