簡體   English   中英

Visual Studio 2005 - C++ - 什么控制清單創建

[英]Visual Studio 2005 - C++ - What controls the manifest creation

我試圖弄清楚為什么調試版本會因“無法找到依賴程序集 microsoft.vc80.debugcrt”事件錯誤而崩潰。

刪除所有內容(任何不是.cpp 或.h)並重新創建解決方案后 - 我仍然遇到問題。

谷歌搜索沒有結果,重新安裝 VS 並沒有產生任何變化。

我確實在 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c 中有 dll。

我打開了 \debug\.exe.intermediate.manifest 文件,它有 2 個(dependentAssembly)條目:
第一個:名稱='Microsoft.VC80.DebugCRT'版本='8.0.50608.0'
第二:名稱='Microsoft.VC80.DebugCRT'版本='8.0.50727.762'

如果我刪除一個並將另一個更改為 name='Microsoft.VC80.DebugCRT' version='8.0.50727.42'

我可以得到一個將開始的構建。

當然,我確實安裝了 VS2008 - 但是控制版本的是什么? 或者我怎樣才能得到正確的調試 dll 版本來“堅持”。

VS2008是通過控制面板卸載的。

編輯:如果搜索 DebugCRT,則在注冊表中找不到任何內容。
環境路徑指向 VS8 文件夾。
c:\windows\winsxs\policies 文件夾中只有 1 個 DebugCRT 文件夾
(8.0.50.727.42)
c:\windows\winsxs\manifests文件夾只有.42版本的.cat和.manifest
.manifest 文件(在上面的清單文件夾中)的 version="8.0.50727.42"

澄清:清單文件有 2 個“dependentAssembly”條目,每個條目都有不同的版本,而不是 .42。 我可以刪除 1 個條目並更改另一個條目以匹配 .42 以獲得啟動的調試版本。

EDIT2:我也在使用 boost 並且在 DLL 中有 .762 版本

該版本是從 Boost DLL 中獲取的,這是 Boost 的下載、預編譯版本。 一旦庫被重新編譯(並重新安裝),解決方案的重新構建會生成一個具有單個版本的清單,並且程序鏈接並運行。

因此 - 檢查導入到解決方案中的庫和 dll 以了解使用的版本。

VS 2008 是 VC90 而不是 VC80,所以這不是問題的一部分。 清單請求的程序集和 SxS 加載的程序集之間的關系在 C:\WINDOWS\WinSxS\Policies 中找到。 IIRC,“8.0.50608.0”由 VS2005 pre-SP1 生成。 這是錯誤的,應該是 8.0.50727.42,但這被政策抓住了。

我不確定您如何獲得兩個清單。 你的清單設置是什么?

我建議在您的特定環境中重建 Boost。 此外,您可以通過靜態鏈接 CRT 來完全取消 Side by Side 程序集...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM