Visual Studio 清单(manifest)导致的问题
??? 前些天把一個項目從XP 32位平臺拿到Win7 64位平臺去編譯運行,用VS2008按Win32的方式編譯連接都通過,但是一運行就報錯,說是找不到msvcr90.dll,編譯的DEBUG版本,也會調用msvcr90.dll?把項目中的每個工程配置中的“代碼生成”中的“運行時庫”由“多線程DLL(/MD)”設置成“多線程調試DLL(/MDd)”,一編譯運行還是報同樣的錯。
??? 從VS2005開始,微軟就將所有生成的應用程序都加上了一個清單文件(manifest),這個清單文件包含了運行此應用程序所需要的一些文件配置信息,如平臺,版本等等,這個清單文件可以內嵌在應用程序中,也可以單獨存在。在應用程序運行時就會根據這個清單文件去找相應的依賴文件,默認首先是查找系統目錄下的WinSxS目錄,如果找不到會在應用程序所在目錄去查找。這個項目在XP下用VS2008是完全正常編譯運行,但在Win7 X64下就出現了找不到動態庫的問題。
??? 幾經查找與試驗,發現原來項目中的資源包含一個清單,這個清單只包含Common Controls的庫文件comctl32.dll,項目在編譯連接時會生成一個單獨的清單文件,這個清單文件不包括Common Controls的庫文件,我想應該是以項目資源形式存在的清單內嵌到應用程序中與非項目資源形式的清單發生沖突,導致在Win7下不能正常運行。把以項目資源形式存在的清單刪除,編譯運行,就正常了。我還嘗試了刪除后以內嵌和外置兩種方式存在的清單,都正常。
??? 希望我的經歷能幫助到遇到同樣問題的網友。
轉載于:https://www.cnblogs.com/witton/archive/2011/11/17/6868981.html
總結
以上是生活随笔為你收集整理的Visual Studio 清单(manifest)导致的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scvn 操作
- 下一篇: sed之G、H、g、h使用