起因:
程序工程設置了_BIND_TO_CURRENT_VCLIBS_VERSION,打包,到測試機上運行,一切OK。build server上Run time版本號為9.0.30729.4148。
測試需要,我在我機器上build了A.dll,將其拷貝到測試機器替換原來的dll。程序運行不起來,界面也不出來,查看log,發現是loadlibrary失敗。
在我編譯的機器上按照程序,用我自己build的dll替換安裝目錄下的dll,運行程序,ok。
解決:
進一步分析,發現我的機器上用的RT version 9.0.30729.6161。在網上找了6161的vcredist.exe的分發包,在測試機器上安裝,運行程序,OK,成功了。
RT 9.0.30729.6161 下載地址:http://www.microsoft.com/en-us/download/details.aspx?id=26368 (Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package MFC Security Update)
分析:
A.dll的menifest里既有4148,又有6161。說明manifest里同時有兩個版本是可行的。
插曲:
在我還沒有找到解決方案前,同事建議將C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h里的#define _CRT_ASSEMBLY_VERSION "9.0.30729.6161"改成#define _CRT_ASSEMBLY_VERSION "9.0.30729.4148"。我試了,結果是不行,不確定是這樣不行,還是我依賴的dll/lib庫太多了,沒有處理干凈。