如何为MSBuild指定平台?

Dav*_*jak 139 msbuild

我正在尝试使用MSBuild构建具有指定目标平台的解决方案(我需要二进制文件,x86和x64).这是我尝试的方式:

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Run Code Online (Sandbox Code Playgroud)

但是,如果平台与"任何CPU"不同,则构建始终会失败.我究竟做错了什么?

这是while输出MSBuild打印:

C:\ WINDOWS\Microsoft.NET\Framework\v3.5> MsBuild SolutionPath\Solution.sln/t:Rebuild/p:Configuration = Release/p:Platform ="x86"Microsoft(R)Build Engine Version 3.5.30729.1 [ Microsoft .NET Framework,版本2.0.50727.3082]版权所有(C)Microsoft Corporation 2007.保留所有权利.

建立于2010年7月1日8:28:10开始.在节点0上项目"SolutionPath\Solution.sln"(重建目标t(s)).SolutionPath\Solution.sln:错误MSB4126:指定的解决方案配置"Release | x86"无效.请使用"配置和平台"属性指定有效的解决方案配置(例如,MSBuild.exe Solution.sln/p:Configuration = Debug/p:Platform ="Any CPU")或将这些属性留空以使用默认解决方案配置.完成构建项目"SolutionPath\Solution.sln"(重建目标) - 失败.

建立失败.

"SolutionPath\Solution.sln"(重建目标)(1) - >(ValidateSolutionConfiguration target) - > SolutionPath\Solution.sln:错误MSB4126:指定的解析配置"Release | x86"无效.请使用Configuration和Platform属性指定有效的解决方案配置(例如MSBuild.ex e Solution.sln/p:Configuration = Debug/p:Platform ="Any CPU")或将这些专业保留为空以使用默认解决方案配置.

0 Warning(s)
1 Error(s)
Run Code Online (Sandbox Code Playgroud)

时间流逝00:00:00.03

如果我尝试使用devenv为x86/x64构建它,它可以很好地工作,但是我正在尝试设置构建服务器而不安装所有必需的Visual Studio版本.顺便说一句,如果有一个更好的免费工具(支持.NET框架4),我很乐意听到它.

Tom*_*bes 176

在MSBuild或Teamcity中使用命令行

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64
Run Code Online (Sandbox Code Playgroud)

或使用较短的形式:

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64
Run Code Online (Sandbox Code Playgroud)

无论如何,您需要在项目中设置平台,请参阅Julien Hoarau的答案.

  • 如果对任何人有帮助,命令行上的多字参数用双引号引起来。因此,对于需要的人来说,可以使用“Platform=”Any CPU”或“Platform=”Mixed Platform”。 (7认同)
  • 请注意,MSBuild不会考虑Visual Studio"解决方案配置",而是在为解决方案的每个项目执行xxproj之前设置属性.无论您在Visual Studio中选择哪种项目配置,平台和配置对于解决方案的每个项目都是相同的. (4认同)
  • 或更短一些:/ p:Configuration =发布; AnyOtherParameter = Abc123;平台= x86 (2认同)

Jul*_*rau 101

如果要构建x86x64的解决方案,则必须为两个平台配置解决方案.实际上你只有一个任何CPU配置.

如何检查项目的可用配置

要检查给定项目的可用配置,请打开项目文件(*.csproj例如)并查找PropertyGroup右侧的项目Condition.

如果要构建Release模式x86,则必须在项目文件中包含以下内容:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

如何在Visual Studio中创建和编辑配置

Configuration Manager面板http://i.msdn.microsoft.com/Cc563937.11a492fe-e240-4cdd-9b53-b6aae7224b09(en-us,office.12).jpg

新的解决方案平台按钮http://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_15.png

新的解决方案平台面板http://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_18.png

如何创建和编辑配置(在MSDN上)

  • 例如,有些项目使用`Win32`而不是`x86`,`CMake`生成`(`libssh2`使用`CMake`). (4认同)
  • x86构建32位dll /可执行文件,x64构建64位dll /可执行文件. (2认同)

JJM*_*pls 14

如果您尝试从命令行执行此操作,则可能会遇到一个问题,即为您设置了计算机范围的环境变量"平台"并对您不利.如果我使用VS2012命令窗口而不是常规的Windows命令窗口,我可以重现这一点.

在命令提示符下键入:

设置平台

在VS2012命令窗口中,我有一个'X64'预设值.这似乎会干扰我的解决方案文件中的任何内容.

在常规命令窗口中,'set'命令会产生"未定义变量"消息......这很好.

如果上面的'set'命令的结果没有返回环境变量值,那么你应该很高兴.

  • 这当然是VS2012 x64命令窗口与VS2012 x86命令窗口的区别.IOW,按设计,不是"干扰" (2认同)

小智 6

希望这对那里的人有帮助。

对于我指定的平台"Any CPU",将其更改为"AnyCPU"并解决了问题。

msbuild C:\Users\Project\Project.publishproj /p:Platform="AnyCPU"  /p:DeployOnBuild=true /p:PublishProfile=local /p:Configuration=Debug
Run Code Online (Sandbox Code Playgroud)

如果您查看 .csproj 文件,您将看到要使用的正确平台名称。