x64 build:错误MSB8013:此项目不包含Debug | Win32

时间:2015-10-15 18:43:13

标签: c++ visual-studio-2010 msbuild vcxproj

我正在尝试使用许多解决方案运行复杂构建的纯x64构建(一些用于CI,一些用于开发人员)和数百个项目并且已经遇到“错误MSB8013:此项目不包含配置和Debug | Win32“

的平台组合

我把它简化为一个简单的配置:

  • 解决方案A包含项目X&项目Y.项目X有一个项目 参考到项目Y.
  • 解决方案B包含项目X。

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

当我构建解决方案B(作为x64)时,我会收到

  

错误MSB8013:此项目不包含配置和   Debug | Win32

的平台组合

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

  

如果某个其他项目试图遵循a,也可能出现此错误   项目到项目参考这个项目,这个项目已经   卸载或未包含在解决方案和引用中   项目不使用相同或等效的配置构建   或平台。

问题是引用项目“使用相同或等效的配置或平台构建。”

查看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管理包依赖关系的最终解决方案,但这在短期内是不可行的)

5 个答案:

答案 0 :(得分:4)

我可以通过将所有引用的项目都包含在解决方案中来解决类似的问题 - 在这种情况下,将项目Y包括在解决方案B中。

答案 1 :(得分:2)

一个修复方法是手动编辑.vcxproj文件以定义默认平台:

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

    < Platform Condition =“'$(Platform)'==''”> x64< / Platform>

答案 2 :(得分:0)

这似乎是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。第二个是错误的并且得到错误的$(配置)| $(平台)值产生提到的错误。这个问题可能与this topic直接相关,因为我的项目中的VCTargetsPath指向错误的(77KB)Microsoft.CppBuild.targets目录(我使用VS2015所以它应该使用V140目录中的那个)。我找到了两个解决方法:1)替换buggy文件或2)修改HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0\VCTargetsPath10注册表以指向正确的文件。

答案 3 :(得分:0)

我发现很难看到你通过这个尝试实现的目标。你总是想建立X和Y吗?即使在没有提到Y的解决方案中?对我来说是不合逻辑的。虽然,我可以根据你的需要为你提供解决/解决这个问题的一些解决方案。

  

如果你想用A和X建立X& Y和B

     

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

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

否则

  

如果您想使用任一解决方案构建X& Y

     

很抱歉,但目前在MSBuild中这是不可能的。我建议将项目Y添加到解决方案中并引用它,但是,为什么呢?您已经有一个包含它们的项目,如果您想要不同的输出,您可以轻松地进行不同的配置。

答案 4 :(得分:0)

由于缺少代表,我无法添加评论,但是按照user1825216的回答,我从命令行运行MSBuild,因此我通过在构建命令中添加-p:Platform=x64来解决此错误而不是修改.vcxproj。