![](/img/trans.png)
[英]Incorrect ComCtl32.dll is loaded after porting a project from Win32 to x64 platform in Visual Studio 2010
[英]x64 build: error MSB8013: This project doesn't contain the Configuration and Platform combination of Debug|Win32
我正在嘗試為具有許多解決方案(一些針對CI,一些針對開發人員)和數百個項目的復雜版本運行純x64版本,並且遇到了“錯誤MSB8013:此項目不包含配置和平台組合調試| Win32“
我將其簡化為一個簡單的配置:
沒有一個項目或解決方案包含Win32平台-它已被刪除。
當我構建解決方案B(如x64)時,我收到了
錯誤MSB8013:此項目不包含Debug | Win32的配置和平台組合
該錯誤消息有時包含其他信息:
如果某個其他項目試圖遵循該項目的項目間引用,此項目已被卸載或未包含在解決方案中,並且引用項目未使用相同或等效項構建,則也可能會出現此錯誤。配置或平台。
問題在於引用項目確實 “使用相同或等效的配置或平台進行構建”。
查看msbuild診斷,正在構建項目Y,因為項目X包含對該項目的引用。 但是,僅在構建項目Y之前刪除配置和平台屬性:
1>Task "MSBuild" (TaskId:28)
1> Removing Properties: (TaskId:28)
1> Configuration (TaskId:28)
1> Platform (TaskId:28)
結果,Microsoft.Cpp.Default.props啟動,並將它們設置為Debug | Win32:
1>Task "Message" (TaskId:11)
1> Configuration=Debug (TaskId:11)
1>Done executing task "Message". (TaskId:11)
1>Task "Message" (TaskId:12)
1> Platform=Win32 (TaskId:12)
1>Done executing task "Message". (TaskId:12)
如何防止這種情況並使msbuild通過所選的配置和平台?
(我了解使用NuGet來管理程序包依賴性的最終解決方案,但這在短期內不可行)
我可以通過將所有引用的項目包括到解決方案中來解決類似的問題-在這種情況下,將項目Y包括到解決方案B中。
一種解決方法是手動編輯.vcxproj文件以定義默認平台:
<Platform Condition =“'$(Platform)'==''”> x64 </ Platform>
看來這是Microsoft.CppBuild.targets
文件中的錯誤。 在某些機器上,我看到兩個這樣的文件:一個在C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\V140\\Microsoft.CppBuild.targets
,大小約為120KB,而C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\Microsoft.CppBuild.targets
,大小為77KB。 第二個是錯誤的,錯誤的$(Configuration)| $(Platform)值會產生上述錯誤。 這個問題可能直接與此主題相關 ,因為我項目中的VCTargetsPath指向錯誤的(77KB)Microsoft.CppBuild.targets目錄(我使用VS2015,因此應使用V140目錄中的那個)。 我發現了兩種解決方法:1)替換錯誤的文件或2)修改HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\14.0\\14.0\\VCTargetsPath10
注冊表以指向正確的文件。
我發現很難看到您要通過此方法實現的目標。 您是否一直想構建X和Y? 即使在沒有引用Y的解決方案中? 對我來說會很不合邏輯。 不過,我可以根據您的需要為您提供一些解決/抑制此問題的解決方案。
如果要使用A構建X&Y,使用B構建X
在解決方案A中,將另一個項目設置為構建依賴項 ,而不是在項目X中引用項目Y。您不能將其設置為引用另一個項目(我總是在.vcxproj中刪除引用,它在某處(在項目底部),但是一旦刪除了內部項目引用,就可以對其進行解決方案引用,然后就可以正常工作了。
使用MSBuild構建解決方案A時,它將同時構建X和Y,同時使用MSBuild構建解決方案B。
其他
如果要使用任一解決方案構建X&Y
抱歉,但是在MSBuild中目前還不可能。 我建議將項目Y添加到解決方案中並引用它,但是那為什么呢? 您已經有一個包含兩個項目的項目,並且如果需要不同的輸出,則可以輕松進行不同的配置。
由於缺少rep,我無法添加評論,但是按照user1825216的回答,我從命令行運行MSBuild,因此我通過在-p:Platform=x64
而非build命令中解決了此錯誤修改.vcxproj。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.