繁体   English   中英

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

[英]MSBuild. Building solution with x86, x64 and Any CPU platforms

我的解决方案中有多个项目-具有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):错误:未为项目'Atf.Core.vs201 0.csproj'设置OutputPath属性。 请检查以确保您为此项目指定了有效的Configuration and Platform组合。 配置=“调试”平台形式=“ x86”。 您可能会看到此消息,因为您尝试在没有解决方案文件的情况下构建应用程序,并且指定了该项目不存在的非默认配置或平台。 [D:\\ Engine \\ Code \\ Dependency \\ ATF \\ Framework \\ Atf.Core \\ Atf.Core.vs2010.csproj]

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

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

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

我找到的唯一解决方案是在解决方案中遵循以下规则:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM