C ++ / CLI缺少MSVCR90.DLL

时间:2010-06-07 22:11:48

标签: visual-studio visual-studio-2010 winapi dependencies

我有一个c ++ / cli dll,我在运行时加载,在调试模式下工作得很好。如果我尝试在发布模式下加载dll,则无法加载声明缺少一个或多个依赖项。如果我运行依赖它我从MSVCM90.DLL缺少MSVCR90.DLL。如果我检查dll的调试版本,它也有缺少的依赖项,但是对着debug(D)版本。

我确保调试/发布嵌入了清单文件。我读到有关应用程序加载dll正在构建为任何CPU和dll构建为x86的问题,但我不知道如何将它们都设置为x86。

我正在使用VS2010。

无论如何,我现在已经搞乱了一段时间,并且不知道出了什么问题。我相信那里有人知道发生了什么事。如果我需要包含其他信息,请与我们联系。

alt text http://www.freeimagehosting.net/uploads/fb31c0e256.png

更新

这最终解决了我的问题:http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827

2 个答案:

答案 0 :(得分:10)

MSVCR90是Visual Studio 2008 的运行时。如果您在开发PC上运行应用程序,那么您应该安装调试和发布运行时(作为Visual Studio的一部分),但是您的安装可能出现问题,或者VS2010实际上并未包含旧版本运行时间。如果您尝试在另一台PC上运行Release,那么只需要安装运行时。

无论哪种方式,您都可以通过安装Visual Studio 2008 redistributable来修复它 - 但请确保为您的PC(x86或x64)获得正确的下载。

在以前的VS版本中,您需要运行所编译的版本的运行时,因此如果VS2010遵循此先例,您需要MSVCR100,而不是MSVCR90 - 这表明您可能没有使用VS2010重新编译该dll - 这样做所以可能是让它在你的PC上运行的另一种方法(使用VS2010安装中的redist),但要注意你仍然需要其他用户在他们的PC上安装适当的(VS2010)可再发行组件。

对于“任何CPU”与“x86”,这仅在64位计算机上存在问题。在这些系统上,64位应用程序无法动态链接到32位dll。如果将应用程序编译为“任何CPU”,它将在64位操作系统上进行JIT编译为64位,因此如果它尝试直接调用任何32位dll,则会崩溃。解决方案是构建面向“x86”的应用程序,因为这会强制JIT编译器生成32位代码(即使在64位计算机上),从而确保与您希望调用的DLL兼容。如果DLL是托管程序集,那么您可以在app和dll上使用Any CPU,因为它们都将被JIT化为相同的格式。

答案 1 :(得分:1)

在从Visual Studio 2010迁移后,在Vistual Studio 2012中运行了一个类似的网站时发生了类似的事情。错误消息说MSVCR90.DLL丢失了。解决方案是: 1)删除位于项目路径的文件夹_bindeployable。 2)重建。

我希望它有所帮助。