2011-06-12 26 views
2

硬件升級後,我不得不重新安裝我的系統(Win7)。在升級之前,我還運行了Win7和VS2010,並且我的應用程序在發行版和調試版中運行都沒有問題。現在我編譯和鏈接,但是當我嘗試運行它,我得到:爲什麼我的VS2010本機C++應用程序突然啓動,出現並列錯誤?

The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

事件日誌顯示:

Dependent Assembly Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found. Please use sxstrace.exe for detailed diagnosis.

爲特定的可執行文件。我覺得奇怪的是,我在控制面板中的安裝程序中看到了VS2008運行時間。更奇怪的是,它曾經在我的舊裝置上工作了一週。在升級到VS2010之前,我有VS2008,所以也許就是這個原因。無論如何,我也不明白爲什麼VS2010沒有將我的二進制文件與最新的(VC10)運行時庫鏈接起來,而是依賴於(不存在的)VC9.0。我能做些什麼來讓我的應用程序運行?

編輯:我在這裏包括來自sxstrace的輸出。有可執行一些參考,但他們大多看起來是一樣的,我選擇了32位的一個,因爲應用程序被構建爲32位:

F:\cci\Debug>sxstrace Trace -logfile:trace.etl Tracing started. Trace will be saved to file trace.etl. Press Enter to stop tracing...

F:\cci\Debug>sxstrace Parse -logfile:trace.etl -outfile:sxs.out Parsing log file trace.etl... Parsing finished! Output saved to file sxs.out.

sxs.out的內容:

Begin Activation Context Generation.
Input Parameter:
Flags = 0
ProcessorArchitecture = Wow32
CultureFallBacks = en-US;en
ManifestPath = F:\cci\Debug\gui.exe
AssemblyDirectory = F:\cci\Debug\
Application Config File =
INFO: Parsing Manifest File F:\cci\Debug\gui.exe.
INFO: Manifest Definition Identity is (null).
INFO: Reference: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
INFO: Resolving reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
INFO: Resolving reference for ProcessorArchitecture WOW64.
INFO: Resolving reference for culture Neutral.
INFO: Applying Binding Policy.
INFO: No publisher policy found.
INFO: No binding policy redirect found.
INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
INFO: Did not find manifest for culture Neutral.
INFO: End assembly probing.
INFO: Resolving reference for ProcessorArchitecture x86.
INFO: Resolving reference for culture Neutral.
INFO: Applying Binding Policy.
INFO: No publisher policy found.
INFO: No binding policy redirect found.
INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at F:\cci\Debug\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at F:\cci\Debug\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Attempt to probe manifest at F:\cci\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at F:\cci\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Did not find manifest for culture Neutral.
INFO: End assembly probing.
ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
ERROR: Activation Context generation failed.
End Activation Context Generation.

+2

也許它不是直接您的應用程序。你使用其他第三方程序集嗎?其中一個可以建立對抗vc9的東西?當你運行它時,sxstrace.exe會說什麼? – DXM 2011-06-12 18:36:41

+0

是的,我有兩個第三方庫,我是在VS2008下自己編譯的。我想我將不得不使用VS2010重新編譯它們以刪除VS2008 Debug運行時依賴項。 – neuviemeporte 2011-06-12 20:00:08

回答

8

在控制面板中安裝的程序中顯示的「VS2008運行時」不包括調試運行時。它是可重新分發的運行時,所以它只有運行時的'release'版本。但是由於在重新安裝之前您的計算機上安裝了VS 2008,這就是之前工作的原因 - 調試運行時包含在開發工具中。

一些選項來解決這個問題:

  • 重新安裝VS 2008(我認爲VC++ Express 2008的就足夠了,如果你不再有機會獲得另一個)
  • VS 2010中(或者其他版本重建計劃你會喜歡)

如果你希望你的程序可以被那些沒有安裝工具的人使用(可能包括你),你應該考慮在release模式和/或用靜態鏈接運行時。

+0

+1:我掩飾了他已經有2008運行時的事實......你是對的,他可能做了一個調試可執行文件並且需要調試運行時。 – AJG85 2011-06-12 18:44:35

2

Microsoft.VC90.*Debug*CRT

是的,該DLL將不會在您的機器上可用,您沒有安裝VS2008。您無法從Microsoft獲取它,它是不可分發的文件。

不要擔心你的VS2010項目爲什麼依賴於VS2008版本的CRT,這是非常不健康的。還有一個令人不快的部署頭痛,足以解決這個問題。

安裝VS2008之後,您可以在安裝了VS2008的另一臺計算機上創建安裝和部署項目,以便在新計算機上獲取調試DLL。項目+屬性+先決條件,取消了.NET框架。 Project + Add + Merge Module爲c:\ program files \ common files \ merge模塊中的DLL和策略文件添加調試合併模塊。

0

我曾經在VS 2008環境中構建COM DLL(僅用於開發目的),當項目上的其他組件使用更新版本的Visual Studio時。這組指令詳細說明了如何使用Visual Studio 2008安裝程序僅安裝VS 2008 VC++運行時文件,而不安裝其他不必要的軟件。如果可能,建議在安裝Visual Studio 2010或任何後續VS版本之前遵循這些步驟。

  1. 運行Visual Studio 2008安裝程序。可以使用MSDN訂戶下載下載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. 「Finish Page」出現。點擊完成。
  9. 「Microsoft Visual Studio 2008」對話框再次出現。單擊退出 安裝完成後,請卸載安裝的選件,但不要選擇不安裝它們。從添加/刪除程序(程序和功能),卸載以下:
    • Microsoft SQL Server數據庫發佈嚮導1.2
    • 微軟的Visual Studio Web創作組件
    • 微軟文檔資源管理器2008
    • 微軟Windows SDK的視覺Studio 2008的.NET Framework工具
    • 微軟的SQL Server Compact 3.5 ENU
    • 微軟的SQL Server Compact 3.5設計工具ENU
    • 微軟六SUAL Studio 2008中遠程調試器
    • 微軟Visual Studio 2008中遠程調試器光(64)-ENU
    • 微軟Windows SDK的Visual Studio 2008和的工具
    • 微軟Windows SDK的Visual Studio 2008和的頭文件和庫
    • 的Microsoft Windows SDK爲Visual Studio 2008 SDK引用程序集和智能感知
    • 微軟Visual Studio 2008個的先決條件
    • 微軟SQL Server 2008的管理對象
    • 的Microsoft Windows SDK FO適用於Win32的Visual Studio 2008 SP1 Express工具
    • 適用於Visual Studio 2008 SP1 Express的Microsoft Windows SDK工具。.NET框架 - ENU

隨着這些產品的卸載,這一點應留(從VS 2008安裝)只有兩個產品是:

  • 微軟的Visual C++ 2008可再發行 - 86 9.0 .30729
  • Microsoft Visual Studio 2008專業版 - ENU
相關問題