C# Windows Azure找不到C++/CLI项目的DLL 我有一个C++/CLI项目,它围绕一个非托管C++压缩库,这个项目是由调用C++压缩函数的MVC3项目引用的。

C# Windows Azure找不到C++/CLI项目的DLL 我有一个C++/CLI项目,它围绕一个非托管C++压缩库,这个项目是由调用C++压缩函数的MVC3项目引用的。,c#,azure,c++-cli,cloud,unmanaged,C#,Azure,C++ Cli,Cloud,Unmanaged,本地一切正常,但当我将解决方案发布到Azure云时,我收到一个错误,表示它找不到模块/dll: 无法加载文件或程序集“lzgcoder.DLL”或其依赖项之一。找不到指定的模块 为什么它找不到DLL文件?它是去错地方了还是被编译了?我能查一下吗?谢谢 > P>如果你的服务包中包含了.dll和非托管C库,请确保C++和非托管C库都包含在该服务包中,并确保编译器将C++库放入正确的位置。有一个不错的演练。如果您想验证Azure VM上的内容,只需尝试解压缩您的CSPKG文件,然后再次解压缩.CSSX

本地一切正常,但当我将解决方案发布到Azure云时,我收到一个错误,表示它找不到模块/dll:

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


为什么它找不到DLL文件?它是去错地方了还是被编译了?我能查一下吗?谢谢

> P>如果你的服务包中包含了.dll和非托管C库,请确保C++和非托管C库都包含在该服务包中,并确保编译器将C++库放入正确的位置。有一个不错的演练。

如果您想验证Azure VM上的内容,只需尝试解压缩您的CSPKG文件,然后再次解压缩.CSSX文件,只需将CSSX重命名为zip,并匹配所有引用都在那里。通过这种方式,您可以匹配VM上的内容。验证VS中缺少的DLL后,选择引用DLL并将其属性Copy Local设置为True

>问题是Visual C++ 2010运行时库从云端丢失。

我做的是将VisualC++ 2010可重分配包添加到项目中,同时在启动时悄悄安装它,现在是本地DLL的工作。如果您使用的是本机C dll,您也需要这个

步骤:

1,并将其添加到项目中

2创建新的批处理文件并将其添加到其中: vcredit_x64.exe/q/norestart 退出/b0

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

<Startup>
  <Task commandLine="InstallVCRedist.bat" executionContext="elevated" taskType="simple" />  
</Startup>  
更新:
已退出,并且相同的脚本可以工作,但每个人都应该确保Azure至少运行Windows Server 2008 R2,否则启动任务将挂起,并且角色将永远不会启动,直到您通过RDP在任务管理器中终止vcredist进程

您需要将所有DLL放在live server上存在的文件夹中。如果从本地添加引用,并且该位置在live上不存在,则无法在live上生成代码。因此,在将代码部署到live之前,请确保live上存在所有DLL。

听起来您的项目不是X64程序集,因此无法加载参考库。我将在明天的工作中尝试此功能,谢谢。当你说缺少DLL时,你的意思是它可能依赖于云上不可用但仅在本地可用的其他DLL?是的,没错。。在管理项目中使用本机引用时,需要提供本机引用所需的所有DLL。此外,有时您可能需要在Azure VM上安装本机运行时以获取所有本机引用。您可能没有这种情况,但安装VC++runtine以使本机引用正常工作确实是可能的,但这一切都取决于您使用的本机引用是的,我确实需要VC++2010运行时库,或者我可以使用VS2008编译项目,因为Azure使用现成的旧库。我会投票赞成你的答案,但我还不能这么做。谢谢你的确认。。我很高兴它对你有用。。现在确定如何安装VC++运行时,但您可能需要使用Startup task在Azure角色VM中完成。已经回答了这个问题并列出了执行步骤,但我必须等到明天才能选择自己的答案。我基本上只是上传VC++包和一个脚本来安装它,然后在ServiceDefinition.csdef中的WebRole XML元素中添加一个启动任务。干杯如何在VS 2012 express web版本中将ServiceDefinition.csdef添加到我的现有项目中?您能否指定将vcredit_x64.exe和installvcredit.bat放在哪里?在哪个项目和文件夹中?我把它们放在asp.net项目的bin文件夹中,并将它们全部标记为“总是复制”,但似乎不起作用。不确定如何调试该问题。任何提示都非常感谢@miliu你把它们放在哪里并不重要。我将这两个文件复制到解决方案的根文件夹中,然后通过Visual Studio将它们添加到解决方案中。bin文件夹包含构建的输出,您不应该将静态内容放在其中,“始终复制”是最终将文件复制到bin文件夹的内容。