﻿<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule
      Name="ConfigurationGeneral"
      DisplayName="General"
      PageTemplate="generic"
      Description="General"
      xmlns="http://schemas.microsoft.com/build/2009/properties">
  <Rule.Categories>
    <Category Name="General" DisplayName="General Properties" Description="General properties" />
  </Rule.Categories>
  <Rule.DataSource>
    <DataSource Persistence="ProjectFile" Label="Configuration" />
  </Rule.DataSource>
  
   <StringProperty Name="OutDir" DisplayName="Output Directory"
                  Description="Path to where the compiled program will be placed. Can include environment variables."
                  Category="General" 
                  Subtype="folder"
                  F1Keyword="VC.Project.VCConfiguration.OutputDirectory">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty Name="IntDir" DisplayName="Intermediate Directory"
                  Description="Relative path to where intermediate build files (e.g. .obj files) get generated. Can include environment variables."
                  Category="General" 
                  Subtype="folder"
                  F1Keyword="VC.Project.VCConfiguration.IntermediateDirectory">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty Name="TargetName" DisplayName="Target Name"
                  Description="Specifies a file name of the program this project will generate."
                  F1Keyword="VC.Project.VCConfiguration.TargetName"
                  Category="General">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="" />
    </StringProperty.DataSource>
  </StringProperty>

  <EnumProperty Name="ConfigurationType" DisplayName="Configuration Type"
                Description="Specifies type of program being generated (e.g. executable, static library, dynamic library, ...)."
                Category="General"
                F1Keyword="VC.Project.VCConfiguration.ConfigurationType" >
    <EnumValue Name="Makefile" DisplayName="Makefile" Description="Makefile" />
    <EnumValue Name="Application" DisplayName="Application (.exe)" Description="Application (.exe)" />
    <EnumValue Name="DynamicLibrary" DisplayName="Dynamic Library (.dll)" Description="Dynamic Library (.dll)" />
    <EnumValue Name="StaticLibrary" DisplayName="Static library (.lib)" Description="Static Library (.lib)" />
    <EnumValue Name="Utility" DisplayName="Utility" Description="Utility" />
  </EnumProperty>

  <DynamicEnumProperty Name="WindowsTargetPlatformVersion" DisplayName="Windows SDK Version"
                      Description="Specifies which version of the Windows SDK to use for this project (required for projects targeting Windows). Select 10.0 to use and stay on latest installed Windows 10 SDK version."
                      Category="General"
                      EnumProvider="PlatformVersionsEx"
                      F1Keyword="VC.Project.VCConfiguration.TargetPlatformVersion" >
    <DynamicEnumProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="Globals" SourceOfDefaultValue="AfterContext" HasConfigurationCondition="False" />
    </DynamicEnumProperty.DataSource>
  </DynamicEnumProperty>

  <DynamicEnumProperty Name="PlatformToolset" DisplayName="Platform Toolset" EnumProvider="Toolsets"
                       Description="Specifies which build tools are being used to generate this program."
                       Category="General"
                       F1Keyword="VC.Project.VCConfiguration.PlatformToolset" />
  
  <EnumProperty Name="LanguageStandard"
                DisplayName="C++ Language Standard"
                Description="Determines the C++ language standard the compiler will enforce. It is recommended to use the latest version when possible.  (/std:c++14, /std:c++17, /std:c++20, /std:c++23preview, /std:c++latest)"
                Category="General"
                F1Keyword="VC.Project.VCCLCompilerTool.CppLanguageStandard">
    <EnumProperty.DataSource>
      <DataSource Persistence="ProjectFile" ItemType="ClCompile" Label="" HasConfigurationCondition="true" />
    </EnumProperty.DataSource>
    <EnumValue Name="Default" DisplayName="Default (ISO C++14 Standard)" />
    <EnumValue Name="stdcpp14" Switch="/std:c++14" DisplayName="ISO C++14 Standard" />
    <EnumValue Name="stdcpp17" Switch="/std:c++17" DisplayName="ISO C++17 Standard" />
    <EnumValue Name="stdcpp20" Switch="/std:c++20" DisplayName="ISO C++20 Standard"  />
    <EnumValue Name="stdcpp23" Switch="/std:c++23preview"  DisplayName="Preview - ISO C++23 Standard"  />
    <EnumValue Name="stdcpplatest" Switch="/std:c++latest" DisplayName="Preview - Features from the Latest C++ Working Draft" />
  </EnumProperty>

  <EnumProperty Name="LanguageStandard_C"
              DisplayName="C Language Standard"
              Description="Determines the C language standard the compiler will enforce. It is recommended to use the latest version when possible.  (/std:c11, /std:c17, /std:clatest)"
              Category="General"
              F1Keyword="VC.Project.VCCLCompilerTool.CppLanguageStandard">
    <EnumProperty.DataSource>
      <DataSource Persistence="ProjectFile" ItemType="ClCompile" Label="" HasConfigurationCondition="true" />
    </EnumProperty.DataSource>
    <EnumValue Name="Default" DisplayName="Default (Legacy MSVC)" />
    <EnumValue Name="stdc11" Switch="/std:c11" DisplayName="ISO C11 Standard" />
    <EnumValue Name="stdc17" Switch="/std:c17" DisplayName="ISO C17 (2018) Standard" />
    <EnumValue Name="stdclatest" Switch="std:clatest"  DisplayName="Preview - Features from the Latest C Working Draft"  />
  </EnumProperty>

  <!-- invisible properties to keep backward compatibility if some code is using the rule to get/set properties -->
  <StringProperty Name="SDKDisplayName" DisplayName="Target Platform"
                  Description="The current target platform of the project."
                  ReadOnly="true"
                  Visible="false"
                  Category="General"
                  F1Keyword="VC.Project.VCConfiguration.AppSupport">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty Name="TargetExt" DisplayName="Target Extension"
                  Description="Specifies a file extension that this project will generate. (Example: .exe or .dll)"
                  F1Keyword="VC.Project.VCConfiguration.TargetExt"
                  Visible="false"
                  Category="General"
                  >
                  <StringProperty.DataSource>
                     <DataSource Persistence="ProjectFile" Label="" />
                  </StringProperty.DataSource>
  </StringProperty>
  <StringListProperty Name="ExtensionsToDeleteOnClean" DisplayName="Extensions to Delete on Clean"
                      Description="Semi-colon delimited wildcard specification for which files in the intermediate directory to delete on clean or rebuild."
                      Category="General" Separator=";"
                      Visible="false"
                      F1Keyword="VC.Project.VCConfiguration.DeleteExtensionsOnClean">
                      <StringListProperty.DataSource>
                            <DataSource Persistence="ProjectFile" Label="" />
                      </StringListProperty.DataSource>
  </StringListProperty>
  <StringProperty Name="BuildLogFile" DisplayName="Build Log File"
                  Description="Specifies the build log file to write to when build logging is enabled."
                  F1Keyword="VC.Project.VCConfiguration.BuildLogFile"
                  Visible="false"
                  Category="General" Default="$(ProjectDir)\$(MSBuildProjectName).log"
                  Subtype="file">
                  <StringProperty.DataSource>
                     <DataSource Persistence="ProjectFile" ItemType="BuildLog" PersistedName="Path" />
                  </StringProperty.DataSource>
  </StringProperty>
   
  <EnumProperty Name="UseOfMfc" DisplayName="Use of MFC"
                Description="Specifies how MFC is used by the configuration."
                Visible="false"
                Category="Geleral"
                F1Keyword="VC.Project.VCConfiguration.useOfMfc">
    <EnumValue Name="false" DisplayName="Use Standard Windows Libraries" Description="Use Standard Windows Libraries" />
    <EnumValue Name="Static" DisplayName="Use MFC in a Static Library" Description="Use MFC in a Static Library" />
    <EnumValue Name="Dynamic" DisplayName="Use MFC in a Shared DLL" Description="Use MFC in a Shared DLL" />
  </EnumProperty>
  <EnumProperty Name="UseOfAtl" DisplayName="Use of ATL"
                Description="Specifies how ATL is used by the configuration."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.useOfATL">
    <EnumValue Name="false" DisplayName="Not Using ATL" Description="Not Using ATL" />
    <EnumValue Name="Static" DisplayName="Static Link to ATL" Description="Static Link to ATL" />
    <EnumValue Name="Dynamic" DisplayName="Dynamic Link to ATL" Description="Dynamic Link to ATL" />
  </EnumProperty>
  <EnumProperty Name="CharacterSet" DisplayName="Character Set"
                Description="Tells the compiler to use the specified character set; aids in localization issues."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.CharacterSet">
    <EnumValue Name="NotSet" DisplayName="Not Set" Description="Not Set" />
    <EnumValue Name="Unicode" DisplayName="Use Unicode Character Set" Description="Use Unicode Character Set" />
    <EnumValue Name="MultiByte" DisplayName="Use Multi-Byte Character Set" Description="Use Multi-Byte Character Set" />
  </EnumProperty>
  <EnumProperty Name="CLRSupport" DisplayName="Common Language Runtime Support"
                Description="Specifies whether this configuration supports the Common Language Runtime. This is incompatible with some other settings, e.g. runtime checks. See help for /clr family of C++ compiler switches for full list of conflicts."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.ManagedExtensions">
    <EnumValue Name="false" DisplayName="No Common Language Runtime Support"
               Description="No Common Language Runtime Support" />
    <EnumValue Name="true" DisplayName="Common Language Runtime Support (/clr)"
               Description="Common Language Runtime Support (/clr)"/>
    <EnumValue Name="Pure" DisplayName="Pure MSIL Common Language Runtime Support (/clr:pure)"
               Description="Pure MSIL Common Language Runtime Support (/clr:pure)" />
    <EnumValue Name="Safe" DisplayName="Safe MSIL Common Language Runtime Support (/clr:safe)"
               Description="Safe MSIL Common Language Runtime Support (/clr:safe)" />
  </EnumProperty>
  <StringProperty Name="TargetFrameworkVersion" DisplayName=".NET Target Framework Version"
                Description="Version of the .NET Framework that is targeted by the project. This only applies if 'Common Language Runtime Support' is set."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.TargetFrameworkVersion">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="Globals" HasConfigurationCondition="False" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty Name="TargetFramework"
              Visible="false">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="Globals" HasConfigurationCondition="False" />
    </StringProperty.DataSource>
  </StringProperty>
  <EnumProperty Name="WholeProgramOptimization" DisplayName="Whole Program Optimization"
                Description="Specifies that the program will be optimized across .obj boundaries; works best if C/C++ optimizations are turned on."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.WholeProgramOptimization">
    <EnumValue Name="false" DisplayName="No Whole Program Optimization"
               Description="No Whole Program Optimization" />
    <EnumValue Name="true" DisplayName="Use Link Time Code Generation"
               Description="Use Link Time Code Generation"/>
    <EnumValue Name="PGInstrument" DisplayName="Profile Guided Optimization - Instrument"
               Description="Profile Guided Optimization - Instrument"/>
    <EnumValue Name="PGOptimize" DisplayName="Profile Guided Optimization - Optimize"
               Description="Profile Guided Optimization - Optimize"/>
    <EnumValue Name="PGUpdate" DisplayName="Profile Guided Optimization - Update"
               Description="Profile Guided Optimization - Update"/>
  </EnumProperty>
  <BoolProperty Name="WindowsAppContainer"
                DisplayName="Windows Store App Support"
                Description="Enable this project to support Windows Store apps."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.AppSupport" />
  <BoolProperty Name="UseDebugLibraries" DisplayName="Use Debug Libraries"
                Description="Specifies whether this configuration should use debug libraries and debug switches"
                Category="General" Visible="false">
  </BoolProperty>
  <BoolProperty Name="EnableManagedIncrementalBuild"
                DisplayName="Enable Managed Incremental Build"
                Description="Enables managed incremental build scenarios using metagen."
                Category="General"
                Visible="false"
                F1Keyword="VC.Project.VCConfiguration.EnableManagedIncrementalBuild">
    <BoolProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <StringProperty Name="_ProjectFileVersion" DisplayName="Project File Version"
                Description="Specifies the version of the conversion tool used to create this project file."
                Category="General"
                Visible="false">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty Name="ProjectGuid" Visible="False">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="Globals" HasConfigurationCondition="False" />
    </StringProperty.DataSource>
  </StringProperty>
  <DynamicEnumProperty Name="TargetFrameworkMoniker" DisplayName="Target Framework Moniker" EnumProvider="TargetFrameworkMoniker" Visible="false" />
  <StringProperty Name="TargetPath" Visible="False"/>
  <StringProperty Name="MSBuildProjectDirectory" Visible="false"/>
  <StringProperty Name="PackageAction" Visible="false" Description="The MSBuild target to use when packaging a project." />
  <StringProperty Name="DefaultContentType" Visible="false" Description="The default content type name to use when adding files." />
  <StringProperty Name="VCInstallDir" Visible="false" />
  <StringProperty Name="VCIDEInstallDir" Visible="false" />
  <StringProperty Name="VCToolsInstallDir" Visible="false" />
  <StringProperty Name="VSInstallDir" Visible="false" />
  <StringProperty Name="Platform" Visible="false" />
  <StringProperty Name="Configuration" Visible="false" />
  <StringProperty Name="DebuggerSymbolsPath" Visible="false" />
  <StringProperty Name="AssemblySearchPaths" Visible="false" />
  <StringProperty Name="DefaultPlatformToolset" Visible="false" />
  <BoolProperty Name="EnableDesignTimeBuild" Visible="false" />
  <BoolProperty Name="AppContainerApplication" Visible="false" />
  <EnumProperty Name="TargetRuntime" Visible="false">
    <EnumValue Name="Managed" />
    <EnumValue Name="Native" />
    <EnumValue Name="AppHost" DisplayName="Windows app" />
  </EnumProperty>
  <StringProperty Name="AddItemTemplateGuid" Visible="false" />
  <BoolProperty Name="ContainsStartupTask" Visible="false" />
  <StringProperty Name="ProjectSubType" Visible="False">
    <StringProperty.DataSource>
      <DataSource Persistence="ProjectFile" Label="Globals" HasConfigurationCondition="False" />
    </StringProperty.DataSource>
  </StringProperty>
</Rule>
