x64 生成:错误 MSB8013:此项目不包含 Debug|赢32
x64 build: error MSB8013: This project doesn't contain the Configuration and Platform combination of Debug|Win32
我正试图获得一个纯x64构建运行一个复杂的构建与许多解决方案(一些CI,一些开发人员)和数百个项目,并遇到"错误MSB8013:此项目不包含调试的配置和平台组合|Win32"
我把它简化为一个简单的配置:
- 方案A包含项目X & &;项目Y.项目X有一个项目参考项目y
- 方案B包含x项目。
所有项目或解决方案都不包含Win32平台-已被删除。
当我构建解决方案B(作为x64)时,我收到
错误MSB8013:此项目不包含配置和平台组合调试|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中。
这似乎是Microsoft.CppBuild.targets
文件中的错误。在一些机器上,我看到两个这样的文件:一个在C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V140Microsoft.CppBuild.targets
中,大小为~120KB, C:Program Files (x86)MSBuildMicrosoft.Cppv4.0Microsoft.CppBuild.targets
大小为77KB。第二个是错误的,并且得到错误的$(Configuration)|$(Platform)值,从而产生上述错误。这个问题可能与这个主题直接相关,因为我的项目中的VCTargetsPath指向错误的(77KB) Microsoft.CppBuild.targets目录(我使用VS2015,所以它应该使用V140目录中的目录)。我发现了两个解决方案:1)替换有bug的文件或2)修改HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftMSBuildToolsVersions14.014.0VCTargetsPath10
注册表以指向正确的文件。
一种修复方法是手动编辑.vcxproj文件来定义默认平台:
- 在文本编辑器中打开vcxproj文件
- 在"Globals"属性组中添加这行:
& lt;平台条件= " $(平台 )' == ''"& gt; x64<Platform>
由于缺乏rep,我无法添加评论,但与user1825216的答案相同,我正在从命令行运行MSBuild,因此我通过将-p:Platform=x64
添加到构建命令中而不是修改.vcxproj来解决此错误。
我发现很难看出你想通过这个达到什么目的。你总是想建立X和Y吗?即使在不涉及Y的解中?对我来说是相当不合逻辑的。不过,我可以根据你的需要,为你提供一些解决方案来解决/抑制这个问题。
其他如果你想用A构建X&Y,用B构建X
在解决方案A中,将其他项目设置为构建依赖项,而不是在项目x中引用项目Y。你不能设置它,只要它引用其他项目(我总是删除.vcxproj中的引用,它在项目底部的某个地方),但是一旦你删除了内部项目引用,你可以有解决方案引用到它,然后它应该工作得很好。
当你用MSBuild构建解决方案A时,它将构建X和Y,而用MSBuild构建解决方案B
如果您想使用任一解决方案构建X&Y
对不起,但这不是真的可能在MSBuild目前。我建议将项目Y添加到解决方案中并引用它,但是,为什么要这样做呢?你已经有了一个项目,其中包含了它们,如果你想要不同的输出,你可以很容易地进行不同的配置。
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- "Debug assertion failed" 这种有什么问题?它应该按年份对包含电影对象的动态列表进行排序
- x64 生成:错误 MSB8013:此项目不包含 Debug|赢32