x64构建:错误 MSB8013:此项目不包含 Debug|Win32 的配置和平台组合

17

我正在尝试为一个包含多个解决方案(一些用于 CI,一些用于开发人员)和数百个项目的复杂构建获取一个纯 x64 构建,并遇到了“错误 MSB8013:此项目不包含 Debug | Win32 配置和平台组合”的问题。

我已将其简化为一个简单的配置:

  • Solution A 包含 Project X 和 Project Y。Project X 对 Project Y 有一个 项目引用
  • Solution B 也包含 Project X。

没有任何项目或解决方案包含 Win32 平台 - 它已被删除。

当我以 x64 构建解决方案 B 时,我收到以下错误:

错误 MSB8013: 此项目不包含 Debug|Win32 配置和平台组合。

错误消息有时会包含其他信息:

如果其他某个项目正在尝试跟随对该项目的项目到项目引用,而此项目已卸载或未包含在解决方案中,并且引用项目未使用相同或等效的配置或平台进行构建,则还可能出现此错误。

问题在于引用项目确实是“使用相同或等效的配置或平台进行构建”的。

查看 msbuild 日志,可以看到 Project Y 被构建,因为 Project 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来管理包依赖关系是最终解决方案,但在短期内这并不可行)

5个回答

14

我曾通过将所有被引用的项目包含到解决方案中来解决类似问题 - 在这种情况下是将Project Y包含到Solution B中。


我有一些破损的项目引用,将这些项目添加到解决方案中并更新引用即可解决问题。谢谢! - Roger_S

4
看起来这是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注册表,使其指向正确的文件。

3

一种解决方法是手动编辑.vcxproj文件以定义默认平台:

  1. 在文本编辑器中打开vcxproj文件
  2. 在“Globals” PropertyGroup中添加以下行:

    <Platform Condition="'$(Platform)' == ''">x64</Platform>


通过 Visual Studio,修改“项目配置”并添加“x64”,对我有效。 - FindOutIslamNow

3
最初的回答:

由于声望值不足,我无法添加评论,但与user1825216的回答相同,我正在从命令行运行MSBuild,因此通过在构建命令中添加-p:Platform=x64而不是修改.vcxproj来解决此错误。


哇!谢谢你。这个方法有效。 - olawalejuwonm

1
我发现你试图通过这个做什么很困难。你是否总是想建立X和Y?即使在没有参考Y的解决方案中?对我来说,这相当不合逻辑。但是,根据您的要求,我可以为您提供一些解决/抑制此问题的解决方案。

如果您想使用A构建X&Y并使用B构建X

在解决方案A中,将另一个项目设置为构建依赖项,而不是在项目X中引用项目Y。只要它引用了其他项目,就无法设置它(我总是在.vcxproj中删除参考,它在项目底部的某个地方),但是一旦您删除了内部项目引用,您可以让解决方案引用它,然后它应该正常工作。

当您使用MSBuild构建解决方案A时,它将构建X和Y,而使用MSBuild构建解决方案B时

否则
如果你想用任何一种解决方案来构建X和Y,很抱歉目前在MSBuild中并不是真正可行的。我建议将项目Y添加到解决方案中并进行引用,但这样做的原因是什么呢?你已经有一个包含它们两个的项目了,如果你想要不同的输出,可以轻松地创建不同的配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接