我有一个围绕非托管C压缩库包装了一个C ++ / CLI的项目,而这个项目是通过调用C ++压缩功能的MVC3项目中引用。
一切工作正常当地,但是当我发布解决Azure云,我得到一个错误说,它无法找到该模块/ DLL:
无法加载文件或程序集“LZGEncoder.DLL”或它的一个依赖。 指定的模块无法找到。
为什么不能找到它的DLL文件? 莫非要在错误的地方或者在所有被编译? 有什么办法,我可以检查? 谢谢!
我有一个围绕非托管C压缩库包装了一个C ++ / CLI的项目,而这个项目是通过调用C ++压缩功能的MVC3项目中引用。
一切工作正常当地,但是当我发布解决Azure云,我得到一个错误说,它无法找到该模块/ DLL:
无法加载文件或程序集“LZGEncoder.DLL”或它的一个依赖。 指定的模块无法找到。
为什么不能找到它的DLL文件? 莫非要在错误的地方或者在所有被编译? 有什么办法,我可以检查? 谢谢!
问题是,在Visual C ++ 2010运行时库从云侧失踪。
我所做的是使用脚本添加Visual C ++ 2010可再发行组件包的项目,一起静默安装在启动时,现在本地的dll的工作。 您还需要这个,如果你使用的是原生的C DLL的。
脚步:
1) 下载的Visual C ++ 2010再发行组件包 ,并把它添加到您的项目。
2)新建一个批处理文件,它添加到它:
vcredist_x64.exe /q /norestart
exit /b 0
3)打开ServiceDefinition.csdef中的文件和有关WebRole元素补充一点:
<Startup>
<Task commandLine="InstallVCRedist.bat" executionContext="elevated" taskType="simple" />
</Startup>
更新:
VISUAL C ++ 2012是出于相同的脚本作品,但每个人都应该确保Azure中运行ATLEAST的Windows Server 2008 R2,否则启动任务将挂起和角色将不会开始(直到你在任务管理器杀vcredist过程通过RDP)。
如果您想验证一下什么是Azure上的VM,只是试图解压到CSPKG文件,然后再解压缩.CSSX文件(重命名只是对CSSX ZIP)和匹配每一个引用都在那里。 这样,您就可以匹配什么是对VM。 一旦你验证哪些DLL在VS丢失,选择参考DLL,并设置其属性“复制本地”为“真”。
您需要将所有的dll是存在活的服务器上的文件夹中。 如果从本地添加refrence和位置不在现场存在比你不能住建代码。 因此,请确保所有的DLL都在现场存在部署代码之前住。
确保C ++的dll和非托管C库(如果它是一个.dll文件,而不仅仅是源)都包含在您的服务包,并确保编译器的倾销C ++库在正确的地方。 这篇文章有一个体面的演练。