为什么我的VS2010本机C ++应用程序不会突然启动,并发出并排错误?

时间:2011-06-12 18:15:22

标签: c++ visual-studio-2008 visual-studio-2010 windows-7

硬件升级后我不得不重新安装我的系统(Win7)。在升级之前,我还运行了Win7和VS2010,我的应用程序在发行版和调试版中都没有出现问题。现在我编译并链接它,但是当我尝试运行它时,我得到:

  

应用程序无法启动,因为它的并排配置不正确。请参阅应用程序事件日志或使用命令行sxstrace.exe工具获取更多详细信息。

事件日志显示:

  

无法找到依赖程序集Microsoft.VC90.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version =“9.0.21022.8”。请使用sxstrace.exe进行详细诊断。

表示特定的可执行文件。对我来说很奇怪的是,我在控制面板中安装的程序中看到了VS2008运行时。更奇怪的是它曾经在我的旧装置上工作一周。在升级到VS2010之前我有VS2008,所以也许这就是原因。无论如何,我也不明白为什么VS2010不能将我的二进制文件链接到最新的(VC10)运行时库,而是依赖于(不存在的?)VC9.0。我该怎么做才能让我的应用程序运行?

编辑:我在这里包含了sxstrace的输出。有一些对可执行文件的引用,但它们看起来大致相同,我选择了32位,因为应用程序是32位构建的:

  

F:\ cci \ Debug> sxstrace Trace -logfile:trace.etl   跟踪开始了。跟踪将保存到文件trace.etl。   按Enter键停止跟踪...

     

F:\ cci \ Debug> sxstrace Parse -logfile:trace.etl -outfile:sxs.out   解析日志文件trace.etl ...   解析完了!输出保存到文件sxs.out。

sxs.out的内容:

  

开始激活上下文生成   输入参数:
      标志= 0
      ProcessorArchitecture = Wow32
      CultureFallBacks = en-US; en
      ManifestPath = F:\ cci \ Debug \ gui.exe
      AssemblyDirectory = F:\ cci \ Debug \
      应用程序配置文件=
  信息:解析清单文件F:\ cci \ Debug \ gui.exe       信息:清单定义标识是(null)       信息:参考:Microsoft.VC90.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version =“9.0.21022.8”
  信息:解析参考Microsoft.VC90.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version =“9.0.21022.8”。
      信息:解析ProcessorArchitecture WOW64的参考           信息:解决文化中立的参考               信息:应用约束政策                   信息:未找到发布商政策。
                  信息:未找到绑定策略重定向。
              信息:开始装配探测                   信息:未在WinSxS中找到程序集。
                  信息:尝试在C:\ Windows \ assembly \ GAC_32 \ Microsoft.VC90.DebugCRT \ 9.0.21022.8__1fc8b3b9a1e18e3b \ Microsoft.VC90.DebugCRT.DLL中探测清单。
                  信息:没有找到中立的文化表现               信息:结束装配探测。
      信息:解析ProcessorArchitecture x86的参考           信息:解决文化中立的参考               信息:应用约束政策                   信息:未找到发布商政策。
                  信息:未找到绑定策略重定向。
              信息:开始装配探测                   信息:未在WinSxS中找到程序集。
                  信息:尝试在C:\ Windows \ assembly \ GAC_32 \ Microsoft.VC90.DebugCRT \ 9.0.21022.8__1fc8b3b9a1e18e3b \ Microsoft.VC90.DebugCRT.DLL中探测清单。
                  信息:尝试在F:\ cci \ Debug \ Microsoft.VC90.DebugCRT.DLL中探测清单。
                  信息:尝试在F:\ cci \ Debug \ Microsoft.VC90.DebugCRT.MANIFEST探测清单。
                  信息:尝试在F:\ cci \ Debug \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.DLL中探测清单。
                  信息:尝试在F:\ cci \ Debug \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.MANIFEST中探测清单。
                  信息:没有找到中立的文化表现               信息:结束装配探测。
      错误:无法解析参考Microsoft.VC90.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version =“9.0.21022.8”。
  错误:激活上下文生成失败   结束激活上下文生成。

3 个答案:

答案 0 :(得分:8)

“控制面板”中已安装程序中显示的“VS2008运行时”不包括调试运行时。它是可再发行的运行时,因此它只有运行时的“发布”版本。但是,由于您在重新安装之前已在计算机上安装了VS 2008,这就是之前的工作原因 - 调试运行时包含在开发工具中。

解决问题的一些选项:

  • 重新安装VS 2008(我认为如果您无法再访问其他人,VC ++ Express 2008就足够了)
  • 使用VS 2010(或您喜欢的任何版本)重建程序

如果您希望未安装工具(可能包括您)的人员可以使用您的程序,则应考虑在发布模式下构建它和/或使用静态链接的运行时构建它。

答案 1 :(得分:2)

  

Microsoft.VC90。* 调试 * CRT

是的,您的计算机上没有该DLL,您没有安装VS2008。你无法从微软获得它,它是一个不可分发的文件。

请注意为什么你的VS2010项目依赖于VS2008版本的CRT,这是非常不健康的。还有一个非常不愉快的部署头痛,足以解决问题的原因。

安装VS2008之后,您可以在另一台安装了VS2008的计算机上创建一个安装和部署项目,以便在新计算机上获取调试DLL。项目+属性+先决条件,取消选中.NET框架。 Project + Add + Merge Module为c:\ program files \ common files \ merge modules中的DLL和策略文件添加调试合并模块。

答案 2 :(得分:0)

我有一个案例,在VS 2008环境中构建COM DLL(仅用于开发目的),当项目中的其他组件使用较新版本的Visual Studio时。这组说明详细说明了如何使用Visual Studio 2008安装程序仅安装VS 2008 VC ++运行时文件,而无需安装其他不必要的软件。如果可能,建议在安装Visual Studio 2010或任何后续VS版本之前遵循这些步骤。

  1. 运行Visual Studio 2008安装程序。可以使用MSDN Subscriber Downloads下载ISO。
  2. 在Visual Studio 2008安装对话框中,选择“安装Visual Studio 2008”
  3. 出现“Microsoft Visual Studio 2008”对话框。单击“下一步”
  4. “起始页” - 接受许可条款,单击“下一步”
  5. “选项页面” - 选择自定义,然后单击下一步
  6. “选项页面” - 取消选择一切。导航至:Microsoft Visual Studio 2008 Professional - >语言工具 - > Visual C ++ - > Visual C ++工具。检查“Visual C ++运行时库”(并检查下面的所有其他内容)。单击“安装”
  7. - >安装收益。
  8. 出现“完成页面”。单击“完成”。
  9. 再次出现“Microsoft Visual Studio 2008”对话框。单击退出 安装完成后,卸载已安装的内容,但不选择安装它们。从“添加/删除程序”(“程序和功能”)中,卸载以下内容:
    • Microsoft SQL Server数据库发布向导1.2
    • Microsoft Visual Studio Web创作组件
    • Microsoft Document Explorer 2008
    • 用于Visual Studio 2008 .NET Framework工具的Microsoft Windows SDK
    • Microsoft SQL Server Compact 3.5 ENU
    • Microsoft SQL Server Compact 3.5设计工具ENU
    • Microsoft Visual Studio 2008远程调试程序
    • Microsoft Visual Studio 2008远程调试器指示灯(x64)-ENU
    • 用于Visual Studio 2008工具的Microsoft Windows SDK
    • 用于Visual Studio 2008标头和库的Microsoft Windows SDK
    • 用于Visual Studio 2008 SDK参考程序集和IntelliSense的Microsoft Windows SDK
    • Microsoft Visual Studio 2008先决条件
    • Microsoft SQL Server 2008管理对象
    • 适用于Win32的Microsoft Windows SDK for Visual Studio 2008 SP1 Express Tools
    • 用于.NET Framework的Microsoft Windows SDK for Visual Studio 2008 SP1 Express工具 - enu
  10. 卸载这些产品后,只剩下两个产品(来自VS 2008安装):

    • Microsoft Visual C ++ 2008 Redistributable - x86 9.0.30729
    • Microsoft Visual Studio 2008专业版 - ENU