硬件升级后我不得不重新安装我的系统(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”。
错误:激活上下文生成失败 结束激活上下文生成。
答案 0 :(得分:8)
“控制面板”中已安装程序中显示的“VS2008运行时”不包括调试运行时。它是可再发行的运行时,因此它只有运行时的“发布”版本。但是,由于您在重新安装之前已在计算机上安装了VS 2008,这就是之前的工作原因 - 调试运行时包含在开发工具中。
解决问题的一些选项:
如果您希望未安装工具(可能包括您)的人员可以使用您的程序,则应考虑在发布模式下构建它和/或使用静态链接的运行时构建它。
答案 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版本之前遵循这些步骤。
卸载这些产品后,只剩下两个产品(来自VS 2008安装):