Windows Azure中没有找到C ++ / CLI项目的DLL(Windows Azure n

2019-06-25 15:00发布

我有一个围绕非托管C压缩库包装了一个C ++ / CLI的项目,而这个项目是通过调用C ++压缩功能的MVC3项目中引用。

一切工作正常当地,但是当我发布解决Azure云,我得到一个错误说,它无法找到该模块/ DLL:

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

为什么不能找到它的DLL文件? 莫非要在错误的地方或者在所有被编译? 有什么办法,我可以检查? 谢谢!

Answer 1:

问题是,在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)。



Answer 2:

如果您想验证一下什么是Azure上的VM,只是试图解压到CSPKG文件,然后再解压缩.CSSX文件(重命名只是对CSSX ZIP)和匹配每一个引用都在那里。 这样,您就可以匹配什么是对VM。 一旦你验证哪些DLL在VS丢失,选择参考DLL,并设置其属性“复制本地”为“真”。



Answer 3:

您需要将所有的dll是存在活的服务器上的文件夹中。 如果从本地添加refrence和位置不在现场存在比你不能住建代码。 因此,请确保所有的DLL都在现场存在部署代码之前住。



Answer 4:

确保C ++的dll和非托管C库(如果它是一个.dll文件,而不仅仅是源)都包含在您的服务包,并确保编译器的倾销C ++库在正确的地方。 这篇文章有一个体面的演练。



文章来源: Windows Azure not finding DLL of C++/CLI project