2011-03-24 74 views
0

我正在使用Visual Studio 2005在Windows XP中開發二進制文件。我生成了我的應用程序的調試版本和發行版本,並且在我的機器上一切正常。但是,當我嘗試在另一臺機器上運行該應用程序時,調試版本運行正常(我認爲是因爲我在兩臺機器上都有相同的Visual Studio),但發佈版本在執行時遇到問題(我擁有相同版本的可再發行組件) 。 閱讀在這裏#1,我已經設置了嵌入式清單以沒有,當我生成我的應用程序,我可以看到我的版本的清單,其內容是這樣的:清單。在發佈版本中執行二進制時出錯

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <dependency> 

    <dependentAssembly> 

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

    </dependentAssembly> 

    </dependency> 

    <dependency> 

    <dependentAssembly> 

     <assemblyIdentity type="win32" 
     name="Microsoft.VC80.MFC" 
     version="8.0.50727.762" 
     processorArchitecture="x86" 
     publicKeyToken="1fc8b3b9a1e18e3b"> 
     </assemblyIdentity> 

    </dependentAssembly> 

    </dependency> 

    <dependency> 

    <dependentAssembly> 

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

    </dependentAssembly> 

    </dependency> 

</assembly> 

如果我刪除最後一個條目,8.0.50727.4053在目標機器的清單中,我可以成功運行該應用程序,但是,爲什麼將此條目添加到清單中?我怎樣才能刪除它?

問候

回答

0

艙單是Microsoft解決他們的DLL地獄。程序使用的每個庫都有一個(libname,version)條目,以便Windows可以加載正確的版本。

關於去除:

你可以試試,如果你的版本VS具有靜態鏈接MFC和CRT庫到可執行文件的能力。然後這些物品應該從艙單中消失。

如果您不能靜態鏈接並且完全控制運行時環境,那麼您可以在沒有.manifest文件的情況下運送。當你無法控制你的runitme環境時,最好爲你的應用程序創建一個安裝程序,它捆綁了所需的庫。

+0

是的,但我能做些什麼來刪除這個8.0.50727.4053條目的清單?以及爲什麼我的應用程序沒有這個入口運行 – opernas 2011-03-24 07:18:39

0

當您在VS2005中使用DLL運行時構建項目時,編譯器會自動包含用於將dependentAssembly條目添加到最終清單的信息。

這裏發生了什麼可能是由於您包括一個使用VS2005 RTM構建的靜態庫項目,現在您嘗試使用VS2005 SP1構建項目。

你的解決方案是:

  • 重建項目中的靜態庫與最新的VS2005,所以所有dependentAssemblies指向相同的,最新的版本。

  • 僅重建您的EXE,並帶有強制它參考RTM運行時的選項。使用說明如下:here

  • 完全禁用自動清單,只需發送一個手工製作的只有一個dependentAssembly CRT參考,作爲您的首選CRT版本。