2016-09-28 70 views
1

我在2010年MSVS MFC項目當我編譯它,MSVS生成包含以下行清單文件:爲什麼MSVS 2010 MFC項目依賴vcredist_x86.exe進行MSVS 2008?

<assemblyIdentity publicKeyToken="1fc8b3b9a1e18e3b" 
    processorArchitecture="x86" version="9.0.21022.8" 
    name="Microsoft.VC90.CRT" type="win32"/> 

其結果是,我得到這取決於兩個選擇vcredist_x64.exe爲MSVS二進制2008和MSVS 2010的vcredist_x86.exe,儘管它實際上只使用vcredist_x86.exe來MSVS 2010!

我試圖關閉項目屬性中的清單生成。之後,我的應用程序開始只安裝MSVS 2010的vcredist_x86.exe。但是一些控件(特別是組合框)破裂並開始顯示不正確。我想這是因爲窗口沒有從以下信息清單更多:

<assemblyIdentity language="*" publicKeyToken="6595b64144ccf1df" 
    processorArchitecture="x86" version="6.0.0.0" 
    name="Microsoft.Windows.Common-Controls" type="win32"/> 
  1. 爲什麼MSVS清單文件寫CRT的版本錯誤?
  2. 如何解決問題/使MSVS在清單文件中寫入正確版本的CRT?

我想通了。我參考了libcurl.lib,它引用了在MSVS 2008中編譯的openssl庫...在用正確版本的openssl重建libcurl之後,對crt 9.0的引用從清單文件中消失。

+0

我不確定,但我回想起當時的情況。你是否應用了Service Pack 1? – lakeweb

+0

你應該寫一個簡短的答案並接受它,而不是編輯你的問題的答案。這使得未來的訪問者更容易發現問題已經得到解答。 – IInspectable

回答

0

可能是因爲項目屬性中的平臺工具集。

將其更改爲v100(我想現在它已設置爲v90),重新激活清單生成和嵌入(Manifest Tool \ Input and Output)並重建您的項目。

+0

不,它被設置爲v100! –

+0

如果它們包含#pragma指令涉及「manifestdependency」,請檢查源代碼 – GeorgeT

+0

stdafx.h包含:#pragma comment(linker,「/ manifestdependency:\」type ='win32'name ='Microsoft.Windows.Common-Controls'version ='6.0.0.0'processorArchitecture ='x86'publicKeyToken ='6595b64144ccf1df'language ='*'\「」)沒有更多的「manifestdependency」條目。 –