什么是默认的msbuild平台

什么是默认的msbuild平台,msbuild,Msbuild,如果未指定平台,msbuild如何选择该平台?在我看来,对于某些解决方案,它选择了“混合平台”,而对于其他解决方案,它选择了“x86” 我打开日志记录的诊断级别,唯一能看到的是,开头的“初始属性”包含例如“平台=混合平台”,但没有解释原因 为了抢占一些答案,我知道我可以手动覆盖平台。这不是问题。我需要知道未指定msbuild时它会执行什么操作。msbuild不选择,但它正在生成的任何msbuild项目都可能默认某些属性。我假设您的问题与MSBuild如何构建解决方案文件有关 msbuild.ex

如果未指定平台,msbuild如何选择该平台?在我看来,对于某些解决方案,它选择了“混合平台”,而对于其他解决方案,它选择了“x86”

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


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

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

msbuild.exe“somesolution.sln”/t:Build
您需要查看组成解决方案的项目,在那里您将看到设置的属性。例如,您可能会在项目文件的顶部看到以下内容:


调试
任意CPU
...
这显示了一个
属性组
,其中包含两个属性,
配置
平台
。它们的值是根据
条件设置的。该条件表示,如果没有为属性
配置设置任何值,则应默认为“Debug”。同样,如果未为
平台设置任何内容,则应默认为
AnyCPU

您还可以看到一个
条件
属性组


...
此条件说明的是,如果属性
配置
平台
匹配
调试
任何CPU
,则应应用其中包含的所有属性

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


这可能会有所帮助:我一直在研究这个问题,最后通过查看
Microsoft.Cpp.default.props
(此版本的Visual Studio中的第21行),找到了我安装的默认平台,它位于
程序文件(x86)\MSBuild\Microsoft.Cpp\v4.0\V120

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


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

感谢您的详细解释,但您只需跨出一步。是的,我正在查看类似“msbuild mysolution.sln/t:Build”的内容,然后msbuild检查存在哪些项目,并根据配置|平台设置开始构建它们。然后,sln文件将其配置|平台映射到项目配置|平台。我的问题是默认选择哪个解决方案的配置平台。我指的是解决方案日志中的这一行:构建解决方案配置“Debug | Mixed Platforms”。@Elephantik如果查看解决方案生成的metaproj文件,就会发现它与在单个项目本身上调用MSBuild而不传入配置/平台是一样的。因此,如果soln中包含的多个项目中的默认配置/平台不同,并且您自己没有传入配置/平台,那么它将调用这些项目中定义的默认值。+1表示
SolutionConfigurationPlatform
位。已删除项目的所有AnyCPU配置,但MSBuild在生成时仍在尝试拾取AnyCPU。从解决方案中删除了ANYCPU配置,现在它选择了x86,这是我想要的。<代码> Win32 是C++项目,但问题似乎是关于C.*项目,正如它提到的代码“x86/CODE >,这是C语言。