清單的作用,指定程式依賴的C運行庫的dll及版本,包括mfc,atl,CRT等,可以在visual studio安裝目錄下的vc/redist下看到Release和Debug的版本,具體依賴哪項,可以看看您的項目配置
(確定您的應用程式依賴哪些 Visual C++ 庫的一種方式是:查看您項目的"項目設定"對話方塊中的"常規"選項卡。例如,您可能看到項目使用的是 MFC 和 ATL 庫。如果選擇了"在動態庫中使用 MFC",則您的應用程式在運行時將依賴 MFC DLL(如 mfc80.dll)。如果您的應用程式不使用 MFC 或 ATL,它可能仍依賴 CRT 庫(如果已在"項目屬性"的 C/C++ 分支中的"代碼產生"選項卡上為"執行階段程式庫"選擇了"多線程調試
DLL (/MDd)")
---該段引自msdn理解 Visual C++ 應用程式的依賴項
清單可以嵌入也可以不嵌入。
嵌入的好處不需要特別留意將清單跟可執行程式放在一起,缺陷是換一個電腦運行出了問題不容易處理。
不嵌入的優缺點與嵌入的一一對應,此生彼長。
這裡注意下,一般有三個檔案,一個資源檔,一個中間清單,還有一個最終清單,對我們來說真正有用的就是最終清單,預設命名方式為程式名.manifest,比如你的可執行檔是test.exe,那麼該最終清單為test.exe.manifest。
如果您調整清單設定由嵌入到不嵌入,注意需要重新編譯所有依賴的外部庫,否則容易導致R6034,某個應用程式嘗試不使用清單來載入C運行庫。
我除了遇到過上面這個清單引起的錯誤以外,還碰到如下由清單引起的錯誤:visual studio 2008 sp1編寫的嵌入清單的程式換了台電腦運行,提示配置錯誤,使用visual studio 2008遠端偵錯提示錯誤由清單導致,尋找錯誤的過程道路曲折,還是項目組組長細心地發現了問題,嵌入的清單引用的crt版本號碼與拷貝過去的crt庫版本不一致,vs2008
sp1產生manifest檔案中vc++ runtime的版本號碼為9.0.21022.8,而sp1的版本是9.0.30729.1。發現了問題接下來就好解決了,網上搜尋下,具體可以參考http://blog.squallatf.org/post/125/,另外微軟官方論壇也有對該問題的說明與解決方案。