我有一個C++本機庫,使用Visual Studio 2005構建,這是大型項目的一部分。如何構建一個針對特定Visual C++可再發行版本的Visual C++項目
該項目通常包含其他幾個DLL,包括Microft C++可再發行組件包庫(例如msvcr80.dll)。這樣我們就可以無需部署我們的項目,使用戶安裝Microsoft Visual C++可再發行組件包2005
的問題是,每當我把我的圖書館到這個大項目中,我得到以下錯誤:
This application has failed to start because the application configuration is incorrect. Reinstalling application may fix this problem.
爲了解決這個問題,我查看了我的dll使用的是哪個版本的Visual Studio CRT,以及哪個版本的大型項目正在使用它,結果證明它們是不同的。
下面是較大的項目清單:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</assembly>
這是我從我的圖書館有:
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
我那麼做了網絡上的一些研究,至少發現了兩種手動更改我的dll的CRT版本的方法。
第一種是設置下面的宏在我的項目:
#define _CRT_ASSEMBLY_VERSION "8.0.50727.4053"
,第二個是在這個post詳細。
我已經嘗試了他們兩個,但都沒有工作。
至於第一個,我已經添加了_CRT_ASSEMBLY_VERSION到我的項目的頭文件之一,但它沒有改變它的CRT版本。另外,如果我有多個項目,我是否必須將這個宏添加到所有項目中?
至於第二個我已經改變了我的圖書館艙單:
<?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.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
但現在被無它裏面的標籤生成我的圖書館。
最後請注意,我非常喜歡如果我可以使用第一種方法,因爲它更簡單,並且是直接進入代碼的東西,這樣我就不必一直記住爲我維護單獨的清單文件項目。
您是否安裝了2005 SP1?如何建設大型項目? – Joe
你必須使用2005嗎? – stanri
嗨,是的,我的機器上安裝了2005 SP1。我還想過在構建主要大型項目的同一臺機器上構建我的項目,但這是一個高度受控的環境,我不可能在那裏安裝項目所需的依賴項。所以,現在,我必須讓所有的東西都適用於我現在的機器。 – Felipe