簡體   English   中英

x64版本:錯誤MSB8013:該項目不包含Debug | Win32的配置和平台組合

[英]x64 build: error MSB8013: This project doesn't contain the Configuration and Platform combination of Debug|Win32

我正在嘗試為具有許多解決方案(一些針對CI,一些針對開發人員)和數百個項目的復雜版本運行純x64版本,並且遇到了“錯誤MSB8013:此項目不包含配置和平台組合調試| Win32“

我將其簡化為一個簡單的配置:

  • 解決方案A包含項目X和項目Y。項目X具有對項目Y的項目引用。
  • 解決方案B也包含ProjectX。

沒有一個項目或解決方案包含Wi​​n32平台-它已被刪除。

當我構建解決方案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文件以定義默認平台:

  1. 在文本編輯器中打開vcxproj文件
  2. 在“全局” PropertyGroup中添加以下行:

    <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM