我正在尝试为一个包含多个解决方案(一些用于 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来管理包依赖关系是最终解决方案,但在短期内这并不可行)