首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

VS2005 編譯程式在 XP/Server 2003 執行失敗:Side-by-Side 組態錯誤解決方案

     編輯:關於C#

錯誤現象

VS2005 以 Use MFC in a Shared DLL 編譯的原生 C++ 程式,在乾淨的 Windows XP / Server 2003 執行,彈出:

「應用程式組態不正確,應用程式因此未能啟動。重新安裝也許會解決此問題。」

將 MFC 相關 DLL(如 MFC80.DLL、MSVCR80.DLL)複製到程式目錄無效。

根本原因

VS2005 引入 Side-by-Side (SxS) 組件模型,執行檔內嵌 Manifest 描述相依組件版本(如 Microsoft.VC80.CRT version 8.0.50727.XXXX)。作業系統載入器依 Manifest 到 WinSxS 組件存儲區尋找對應版本,不再單純搜尋 PATH 目錄下的 DLL。乾淨系統缺少對應的 SxS 組件導致載入失敗。

解決方案

方案一:安裝 Visual C++ 2005 再發佈套件(推薦)

執行 vcredist_x86.exe,安裝 CRT/MFC/ATL 等 SxS 組件到系統存儲區。

  • 位置:C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe
  • 或從 Microsoft 下載中心搜尋「Visual C++ 2005 Redistributable Package (x86)」。

方案二:靜態連結 MFC/CRT(免部署)

專案屬性 → Configuration Properties → General → Use of MFC → Use MFC in a Static Library
Configuration Properties → C/C++ → Code Generation → Runtime Library → /MT (Release) / /MTd (Debug)

  • 優點:無外部相依、部署單一 EXE
  • 缺點:執行檔體積增大、無法共用 CRT 記憶體、DLL 間無法傳遞 CRT 物件(如 std::string、FILE*、new/delete 必須同一 CRT)

方案三:私有組件部署(較複雜,不建議新專案)

將完整 SxS 組件目錄(含 Manifest、DLL、Catalog)置於應用程式資料夾,需嚴格遵循 SxS 目錄結構命名規範。

補充說明

  • 此問題僅限原生 C++ (MFC/ATL/CRT),不影響純 C#/.NET 程式(.NET Framework 本身透過 GAC/組件重導向處理版本)。
  • VS2008/2010/2012+ 同樣遵循 SxS 機制,對應安裝 VC++ 2008/2010/2012+ Redistributable 即可。
  • 現代部署建議:使用安裝專案、ClickOnce、或容器化打包相依執行階段。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved