MSBuild的。使用x86,x64和任何CPU平台构建解决方案

时间:2015-12-06 23:21:53

标签: c# c++ visual-studio msbuild

我的解决方案中有多个项目 - 使用x86和x64平台的C ++以及使用任何CPU(第三方dll),x86和x64平台的C#。这个项目相互依赖。 我有两个解决方案配置 - x86和x64。当我在VS中选择x86然后所有C ++项目都构建为x86时,所有第三方C#项目都构建为Any CPU,我的C#项目构建为x86。 x64为我的项目产生x64,为第三方C#项目产生任何CPU。 这适用于Visual Studio。 但是,当我尝试通过MSBuild(AppVeyor CI)构建它时,我收到此错误:

  

C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets   (723,5):错误:没有为项目设置OutputPath属性' Atf.Core.vs201   0.csproj&#39 ;.请检查以确保您指定了有效的组合   关于此项目的配置和平台。配置='调试'开发平台   形式=' 86&#39 ;.您可能正在看到此消息,因为您正在尝试构建p   没有解决方案文件的roject,并指定了非默认配置   或者该项目不存在的平台。 [d:\发动机\代码\依赖形成的   IES \ ATF \框架\ Atf.Core \ Atf.Core.vs2010.csproj]

看起来MSBuild并没有考虑解决方案的平台。它尝试使用指定的平台构建解决方案中的每个项目。 我试图解决将/ p:OutputPath = bin \ Debug添加到MSBuild脚本,而x86编译成功,x64给了我很多新错误:(

所以我的问题。是否有可能强制MSBuild从解决方案映射中获取平台,而不是按原样在每个项目中使用它们?

P.S。我正在使用Premake生成我的项目,因此向解决方案添加一些属性可能会很棘手。另外,我想避免"修复"第三方项目。

1 个答案:

答案 0 :(得分:0)

我发现此问题的唯一解决方案是在我的解决方案中遵循以下规则:

  • 为所有项目创建一个唯一的平台名称,例如“Intel”,“UniquePlatform”或“RogerRabbit”。
  • 为每个项目选择正确的参数集。
  • 删除所有项目的所有其他平台。
  • 如果我不打算“修复”它们,请不要将第三方来源包含在我的解决方案中。如果需要,我会在本地Feed上创建一个nuget包。

然后,我可以使用msbuild构建,并且有更少的未使用(未使用,因为没有意义)平台/配置组合。