0. 工具栏的active选项和Configuration manager顶部的选项是完全一致的,修改其中一个会导致另一个立即变化。
1. 变更active选项(即在工具栏下拉列表选择不同的选项)并不会修改sln文件。可能会修改.vs下面的隐藏文件,这样你下次打开vs时会记住上次的选项。
2. 每一个active选项对应的是Project Contexts的一个组合。
每次选择一个不同的active选项,则下面的Project Contexts也立即改变。
比如上图对应的是hackerrank采用release和any cpu,而ScopeApplication2采用Release和x86。
hackerrank对应的sln文件里的这两行:
{1F2020AD-E03D-4341-B66A-F96DF2151719}.Release|Any CPU.ActiveCfg = Release|Any CPU{1F2020AD-E03D-4341-B66A-F96DF2151719}.Release|Any CPU.Build.0 = Release|Any CPU
而ScopeApplication2对应的是:
{81EBD69F-915F-4212-A1E7-8DC2A2BABC1D}.Release|Any CPU.ActiveCfg = Release|x86
等号前面的是solution configuration,也就是active里的选项。
等号后面的是project configuration,也就是Project Contexts里的值,同样也是csproj文件里$(Configuration)|$(Platform)的值。
注意:如果勾了build,则会多出Build.0这一行,不勾则没有Build.0。
3. active configuration 和 active platform是完全独立的。sln文件里会为每一个project配置二者的全部组合。
比如platform添加一个mycpu,则所有的project都会多出如下配置:Debug|mycpu.ActiveCfg = Release|Any CPU
Release|mycpu.ActiveCfg = Release|Any CPU
active configuration 和 active platform的名字也不具备特殊含义,只是个名字而已。
Project Contexts里的platform比如x64,也只是个名字。
4. 添加新的configuration或platform时,如果勾上create new project configurations,则会修改每个project的csproj文件。
添加类似如下内容:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'MyConf|AnyCPU'">
<OutputPath>bin\test\</OutputPath>
</PropertyGroup>
但是删除时却并不会同时从csproj里删除。
5. 决定如何编译的是在csproj文件里。比如
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
Debug和Release不需配置也默认支持。
vs会根据当前active config,找到每个project对应的Configuration|Platform,并设置变量$(Configuration)|$(Platform),也就是build一开始打印出来的值。
Build started: Project: hackerrank, Configuration: Debug Any CPU
然后根据将$(Configuration)|$(Platform)决定如何build。参考资料:
Any CPU vs x86 vs x64 Solution Platforms
https://social.msdn.microsoft.com/Forums/en-US/5ad0ff2c-558c-43ba-a59d-9cd0a0785103/any-cpu-vs-x86-vs-x64-solution-platforms?forum=netfx64bit
Solution configurations & project configurations
https://blogs.msdn.microsoft.com/cflaat/2003/08/14/solution-configurations-project-configurations/
Understanding Build Configurations
https://msdn.microsoft.com/en-us/library/kkz9kefa.aspx