什么是默认的msbuild平台

时间:2013-10-16 11:45:20

标签: msbuild

如果没有指定,msbuild如何选择平台?在我看来,对于某些解决方案,它选择"混合平台"对于其他人" x86"。

我打开了日志记录的诊断级别,我唯一能看到的是"初始属性"在开头包含例如"平台=混合平台"没有任何解释原因。

为了抢占一些答案,我知道我可以手动覆盖平台。这不是问题。我需要知道msbuild在未指定时会做什么。

2 个答案:

答案 0 :(得分:7)

MSBuild不会选择,但它正在构建的任何MSBuild项目都可以默认某些属性。我假设您的问题与MSBuild如何构建解决方案文件有关。

msbuild.exe "somesolution.sln" /t:Build

您需要查看构成解决方案的项目,在那里您将看到设置的属性。例如,您可能会在项目文件的顶部看到以下内容:

<PropertyGroup>
  <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  ...
</PropertyGroup>

这会显示PropertyGroup包含两个属性ConfigurationPlatform。它们的值基于Condition设置。条件说,如果没有为属性Configuration设置任何值,它应该默认为'Debug'。同样,如果Platform没有设置任何内容,则默认为AnyCPU

您可能还会看到Conditional PropertyGroup

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
</PropertyGroup>

这种情况表明,如果属性ConfigurationPlatform匹配DebugAnyCPU,那么它应该应用其中包含的所有属性。

值得注意的是,属性名称只是一个任意名称,值只是字符串。但是,在构建.Net项目时,有一个约定,这些属性及其值是其中的一部分。要查看默认值,您不需要在文本编辑器中打开每个项目。您可以进入Visual Studio并查看解决方案配置。

Visual Studio Solution Configuration

答案 1 :(得分:4)

这可能有所帮助:我正在研究这个问题,最后通过查看Microsoft.Cpp.Default.props中的Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120(此版本的Visual Studio中的第21行)来查找我的安装的默认平台:<Platform Condition="'$(Platform)' == ''">Win32</Platform>

Platform

这意味着在VS12(Visual Studio 2013)下,如果没有明确指定其他平台,MSBuild将选择Win32作为平台。如其他一些问题所述,设置名为SolutionConfigurationPlatforms的环境变量会将默认值更改为您设置的值。

重要说明:如果在Visual Studio解决方案文件(* .sln)上调用MSBuild而不是项目文件,并且未在MSBuild参数中指定平台,则似乎MSBuild将根据解决方案文件中flake8全局部分下的第一个条目自动选择平台。我没有在任何地方找到这个记录,但从实验来看似乎就是这种情况。这意味着编辑项目文件并提供不同的默认平台属性(如上所述),MSBuild将忽略此默认值,因为它甚至在开始查看项目之前就已经选择了平台。直接在项目文件上调用MSBuild似乎绕过了这种行为。