C++ x64生成:错误MSB8013:此项目没有';t包含调试| Win32的配置和平台组合

C++ x64生成:错误MSB8013:此项目没有';t包含调试| Win32的配置和平台组合,c++,visual-studio-2010,msbuild,vcxproj,C++,Visual Studio 2010,Msbuild,Vcxproj,我试图让一个纯x64版本运行在一个复杂的版本中,该版本包含许多解决方案(一些用于CI,一些用于开发人员)和数百个项目,并且遇到了“错误MSB8013:此项目不包含调试| Win32的配置和平台组合” 我将其简化为一个简单的配置: 解决方案A包含项目X和项目Y。项目X有一个项目 参考项目Y 解决方案B还包含项目X 所有项目或解决方案都不包含Win32平台-它已被删除 当我构建解决方案B(作为x64)时,我收到 错误MSB8013:此项目不包含配置和 调试| Win32的平台组合 错误消息有时包

我试图让一个纯x64版本运行在一个复杂的版本中,该版本包含许多解决方案(一些用于CI,一些用于开发人员)和数百个项目,并且遇到了“错误MSB8013:此项目不包含调试| Win32的配置和平台组合”

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

  • 解决方案A包含项目X和项目Y。项目X有一个项目 参考项目Y
  • 解决方案B还包含项目X
所有项目或解决方案都不包含Win32平台-它已被删除

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

错误MSB8013:此项目不包含配置和 调试| Win32的平台组合

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

如果其他项目正在尝试执行某个项目,也可能会出现此错误 项目到项目参考此项目,此项目已 已卸载或未包含在解决方案中,以及引用 project未使用相同或等效的配置生成 或平台

问题在于引用项目使用相同或等效的配置或平台进行构建

查看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启动并将其设置为调试| 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管理包依赖关系的最终解决方案,但短期内不可行)

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

  • 在文本编辑器中打开vcxproj文件
  • 在“全局”属性组中添加此行: x64


  • 我可以通过将所有引用的项目包含到解决方案中来解决类似的问题—在本例中,将项目Y包含到解决方案B中。

    这似乎是Microsoft.CppBuild.targets文件中的一个bug。在某些计算机上,我看到两个这样的文件:一个在大小约120KB的
    C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets
    中,另一个在大小约77KB的
    C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
    中。第二个是错误的$(配置)|$(平台)值,这会产生上述错误。这个问题可能与直接相关,因为我的项目中的VCTargetsPath指向错误的(77KB)Microsoft.CppBuild.targets目录(我使用VS2015,所以它应该使用V140目录中的目录)。我找到了两种解决方法:1)替换错误文件或2)修改
    HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0\VCTargetsPath10
    注册表指向右侧文件。

    。你总是想建立X和Y吗?即使在不涉及Y的解中?这对我来说是相当不合逻辑的。不过,我可以根据您的需要为您提供一些解决方案来解决/消除此问题

    如果要使用A和B构建X&Y和X

    在解决方案A中,将另一个项目设置为生成依赖项,而不是在项目X中引用项目Y。只要它引用另一个项目,就不能设置它(我总是删除.vcxproj中的引用,它位于项目底部的某个地方),但一旦删除了内部项目引用,您可以将解决方案引用到它,然后它就可以正常工作了

    使用MSBuild生成解决方案A时,它将生成X和Y,而使用MSBuild生成解决方案B

    否则

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

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


    由于缺少rep,我无法添加注释,但与user1825216的回答相同,我正在从命令行运行MSBuild,因此我通过将
    -p:Platform=x64
    添加到build命令中,而不是修改.vcxproj来解决此错误。

    visual studio对我有效,修改了“项目配置”并添加了“x64”我有一些损坏的项目引用,将项目添加到解决方案中并更新引用修复了问题。谢谢