什么是默认的msbuild平台

Ele*_*tik 6 msbuild

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

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

为了抢占一些答案,我知道我可以手动覆盖平台.这不是问题.我需要知道msbuild在未指定时执行的操作.

Bro*_*ski 7

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

msbuild.exe "somesolution.sln" /t:Build
Run Code Online (Sandbox Code Playgroud)

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

<PropertyGroup>
  <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  ...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

您可能还会看到Conditional PropertyGroup:

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

这是什么情况说的是,如果物业ConfigurationPlatform匹配Debug,并AnyCPU就应该申请包含的所有属性.

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

Visual Studio解决方案配置


Cha*_*lie 6

这可能会有所帮助:我正在研究这个并最终通过查看Microsoft.Cpp.Default.props(此版本的 Visual Studio 中的第 21 行)找到了我安装的默认平台,该平台位于Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120

<Platform Condition="'$(Platform)' == ''">Win32</Platform>
Run Code Online (Sandbox Code Playgroud)

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

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