天天看點

VS2005 VS2008 Manifest 配置問題總結二、解決方法

一、問題

編譯某個遺留工程後,運作程式時報錯,“由于應用程式的配置不正确,應用程式無法啟動。重新安裝應用程式可能會解決這個問題。”

VS2005 VS2008 Manifest 配置問題總結二、解決方法

檢視生成的Manifest檔案如下:

問題出現在第三個assemblyIdentity中version的值與機器上該dll的值不符。

需要将manifest中第三個assemblyIdentity中version的值修改為與機器上相應dll的版本。

檢視該項目的屬性發現,【連接配接器】->【清單檔案】->【生成清單】項的值為“是”。由此可見,該manifest檔案是編譯器生成的。據推測,manifest中第三條assemblyIdentity資訊,可能是根據該項目使用的某些dll依賴的dll版本生成的。例如,該項目用到了A.dll,而A.dll是在其他機器上編譯的,編譯A.dll的機器上的Microsoft.VC80.DebugMFC的版本是'8.0.50727.6195'。

1. 如果推測是正确的,那麼在本機重新編譯A.dll,再重新編譯程式,新生成的manifest中第三個assemblyIdentity中version的資訊将會與本機中相應dll的版本資訊一緻,就不會報上面所說的錯誤資訊。

2. 可以通過不生成manifest,而使用自己寫的manifest來避免這個錯誤。

使用自己寫的manifest,需要進行如下設定。

1)将【連接配接器】->【清單檔案】->【生成清單】項的值設定為“否”。表示不需要程式自己生成Manifest。

VS2005 VS2008 Manifest 配置問題總結二、解決方法

2)将【清單工具】->【輸入和輸出】->【附加清單檔案】項的值設定為自己寫的manifest檔案的路徑。

VS2005 VS2008 Manifest 配置問題總結二、解決方法

上圖中include.manifest檔案是自己根據程式之前生成的manifest檔案改的。内容如下:

注意第三條assemblyIdentity項中version的資訊。

3)重新生成程式後運作,即解決問題。

3. 可否不生成manifest?

既然生成的manifest中某些assembly的version資訊與本機不符會導緻程式報錯,那麼,能不能不生成manifest檔案呢?

答案是:否。

在VS2005中,運作程式必須有相應的manifest。如果在項目屬性的【連接配接器】->【清單檔案】->【生成清單】中選擇“否”,而在【清單工具】->【輸入和輸出】->【附加清單檔案】項中又沒有設定清單檔案路徑,那麼生成程式時将不會生成manifest檔案。

運作程式時會報如下錯誤:

VS2005 VS2008 Manifest 配置問題總結二、解決方法

繼續閱讀