﻿<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule
   Name="MIDL"
   PageTemplate="tool"
   DisplayName="MIDL"
   SwitchPrefix="/"
   Order="60"
   xmlns="http://schemas.microsoft.com/build/2009/properties"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Rule.Categories>
    <Category
       Name="General"
       DisplayName="General" />
    <Category
       Name="Output"
       DisplayName="Output" />
    <Category
       Name="Advanced"
       DisplayName="Advanced" />
    <Category
       Name="All Options"
       DisplayName="All Options"
       Subtype="Search" />
    <Category
       Name="Command Line"
       DisplayName="Command Line"
       Subtype="CommandLine" />
  </Rule.Categories>
  <Rule.DataSource>
    <DataSource
       Persistence="ProjectFile"
       ItemType="Midl"
       Label=""
       HasConfigurationCondition="true" />
  </Rule.DataSource>
  <StringListProperty
     Name="PreprocessorDefinitions"
     DisplayName="Preprocessor Definitions"
     Description="Specifies one or more defines, including MIDL macros (/D[macros])"
     Category="General"
     Switch="D "
     F1Keyword="VC.Project.VCMidlTool.PreprocessorDefinitions">
  </StringListProperty>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalIncludeDirectories"
     DisplayName="Additional Include Directories"
     Description="Specifies one or more directories to add to the include path (/I[path])"
     Category="General"
     Switch="I"
     F1Keyword="VC.Project.VCMidlTool.AdditionalIncludeDirectories">
  </StringListProperty>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalMetadataDirectories"
     DisplayName="Additional Metadata Directories "
     Description="Specify the directory containing the Windows.Foundation.WinMD file (/metadata_dir [path])"
     Category="General"
     Switch="metadata_dir "
     Separator=";"
     F1Keyword="VC.Project.VCMidlTool.AdditionalMetadataDirectories">
  </StringListProperty>
  <BoolProperty
     Name="EnableWindowsRuntime"
     DisplayName="Enable Windows Runtime"
     Description="Enable Windows Runtime semantics to create Windows metadata file. (/winrt)"
     Category="General"
     Switch="winrt"
     F1Keyword="VC.Project.VCMidlTool.IgnoreStandardIncludePath">
  </BoolProperty>
  <BoolProperty
     Name="IgnoreStandardIncludePath"
     DisplayName="Ignore Standard Include Path"
     Description="Ignore the current and the INCLUDE directories (/no_def_idir)"
     Category="General"
     Switch="no_def_idir"
     F1Keyword="VC.Project.VCMidlTool.IgnoreStandardIncludePath">
  </BoolProperty>
  <BoolProperty
     Name="MkTypLibCompatible"
     DisplayName="MkTypLib Compatible"
     Description="Forces compatibility with mktyplib.exe version 2.03 (/mktyplib203)"
     Category="General"
     Switch="mktyplib203"
     F1Keyword="VC.Project.VCMidlTool.MkTypLibCompatible">
  </BoolProperty>
  <EnumProperty
     Name="WarningLevel"
     DisplayName="Warning Level"
     Description="Selects the strictness of the MIDL code errors (/Wn)"
     Category="General"
     F1Keyword="VC.Project.VCMidlTool.WarningLevel">
    <EnumValue
       Name="0"
       Switch="W0"
       DisplayName="1">
    </EnumValue>
    <EnumValue
       Name="1"
       Switch="W1"
       DisplayName="1">
    </EnumValue>
    <EnumValue
       Name="2"
       Switch="W2"
       DisplayName="2">
    </EnumValue>
    <EnumValue
       Name="3"
       Switch="W3"
       DisplayName="3">
    </EnumValue>
    <EnumValue
       Name="4"
       Switch="W4"
       DisplayName="4">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="WarnAsError"
     DisplayName="Treat Warnings as Errors"
     Description="Enables MIDL to treat all warnings as errors (/WX)"
     Category="General"
     Switch="WX"
     F1Keyword="VC.Project.VCMidlTool.WarnAsError">
  </BoolProperty>
  <BoolProperty
     Name="SuppressStartupBanner"
     DisplayName="Suppress Startup Banner"
     Description="Suppress the display of the startup banner and information message (/nologo)"
     Category="General"
     Switch="nologo"
     F1Keyword="VC.Project.VCMidlTool.SuppressStartupBanner">
  </BoolProperty>
  <EnumProperty
     Name="DefaultCharType"
     DisplayName="C Compiler Char Type"
     Description="Specifies the default character type of the C compiler that will be used to compile the generated code. (/char signed|unsigned|ascii7)"
     Category="General"
     F1Keyword="VC.Project.VCMidlTool.DefaultCharType">
    <EnumValue
       Name="Signed"
       Switch="char signed"
       DisplayName="Signed"
       Description="Signed">
    </EnumValue>
    <EnumValue
       Name="Unsigned"
       Switch="char unsigned"
       DisplayName="Unsigned"
       Description="Unsigned">
    </EnumValue>
    <EnumValue
       Name="Ascii"
       Switch="char ascii7"
       DisplayName="Ascii"
       Description="Ascii">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="TargetEnvironment"
     DisplayName="Target Environment"
     Description="Specifies environment to target (/env arm32|win32|ia64|x64)"
     Category="General"
     F1Keyword="VC.Project.VCMidlTool.TargetEnvironment">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Win32">
    </EnumValue>
    <EnumValue
       Name="Win32"
       Switch="env win32"
       DisplayName="Microsoft Windows 32-bit"
       Description="Win32">
    </EnumValue>
    <EnumValue
       Name="Itanium"
       Switch="env ia64"
       DisplayName="Microsoft Windows 64-bit on Itanium"
       Description="IA64">
    </EnumValue>
    <EnumValue
       Name="ARM32"
       Switch="env arm32"
       DisplayName="Microsoft Windows ARM"
       Description="ARM">
    </EnumValue>
    <EnumValue
       Name="ARM64"
       Switch="env arm64"
       DisplayName="Microsoft Windows ARM64"
       Description="ARM64">
    </EnumValue>
    <EnumValue
       Name="X64"
       Switch="env x64"
       DisplayName="Microsoft Windows 64-bit on x64"
       Description="X64">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="GenerateStublessProxies"
     DisplayName="Generate Stubless Proxies"
     Description="Generate fully interpreted stubs with extensions and stubless proxies for object interfaces (/Oicf, /Oif)"
     Category="General"
     Switch="Oicf"
     F1Keyword="VC.Project.VCMidlTool.GenerateStublessProxies">
  </BoolProperty>
  <BoolProperty
     Name="SuppressCompilerWarnings"
     DisplayName="Suppress Compiler Warnings"
     Description="Supress compiler warning messages (/no_warn)"
     Category="General"
     Switch="no_warn"
     F1Keyword="VC.Project.VCMidlTool.SuppressCompilerWarnings">
  </BoolProperty>
  <BoolProperty
     Name="ApplicationConfigurationMode"
     DisplayName="Application Configuration Mode"
     Description="Allow selected ACF attributes in the IDL file (/app_config)"
     Category="General"
     Switch="app_config"
     F1Keyword="VC.Project.VCMidlTool.ApplicationConfigurationMode">
  </BoolProperty>
  <IntProperty
     Name="LocaleID"
     DisplayName="Locale ID"
     Description="Specifies the LCID for input files, file names and directory paths (/lcid DECIMAL)"
     Category="General"
     Switch="lcid"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.LocaleID">
  </IntProperty>
  <BoolProperty
     Name="MultiProcMIDL"
     DisplayName="Multi-Processor Compilation"
     Description="Run multiple instances at the same time."
     Category="General"
     F1Keyword="VC.Project.VCMidlTool.MultiProcMIDL">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <StringProperty
     Name="OutputDirectory"
     DisplayName="Output Directory"
     Description="Output directory (/out [directory])"
     Category="Output"
     Switch="out"
     F1Keyword="VC.Project.VCMidlTool.OutputDirectory">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="MetadataFileName"
     DisplayName="Metadata File"
     Description="Specifies the name of the generated metadata file (/winmd filename)"
     Category="Output"
     Switch="winmd"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.WinmdFileName">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="HeaderFileName"
     DisplayName="Header File"
     Description="Specifies the name of the generated header file (/h filename)"
     Category="Output"
     Switch="h"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.HeaderFileName">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="DllDataFileName"
     DisplayName="DllData File"
     Description="Specifies the name of the DLLDATA file (/dlldata filename)"
     Category="Output"
     Switch="dlldata"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.DLLDataFileName">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="InterfaceIdentifierFileName"
     DisplayName="IID File"
     Description="Specifies the name for the Interface Identifier file (/iid filename)"
     Category="Output"
     Switch="iid"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.InterfaceIdentifierFileName">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ProxyFileName"
     DisplayName="Proxy File"
     Description="Specifies the name of the proxy file (/proxy filename)"
     Category="Output"
     Switch="proxy"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.ProxyFileName">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="notlb"
     Name="GenerateTypeLibrary"
     DisplayName="Generate Type Library"
     Description="Specify not to generate a typelib ([/notlb] for no)"
     Category="Output"
     F1Keyword="VC.Project.VCMidlTool.GenerateTypeLibrary">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="TypeLibraryName"
     DisplayName="Type Library"
     Description="Specifies the name of the type library file (/tlb filename)"
     Category="Output"
     Switch="tlb"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.TypeLibraryName">
  </StringProperty>
  <EnumProperty
     Name="GenerateClientFiles"
     DisplayName="Generate Client Stub Files"
     Description="Generate client stub file only (/client [stub|none])"
     Category="Output"
     F1Keyword="VC.Project.VCMidlTool.GenerateClientFiles">
    <EnumValue
       Name="Stub"
       Switch="client stub"
       DisplayName="Stub"
       Description="Stub">
    </EnumValue>
    <EnumValue
       Name="None"
       Switch="client none"
       DisplayName="None"
       Description="None">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="GenerateServerFiles"
     DisplayName="Generate Server Stub Files"
     Description="Generate server stub file only (/server [stub|none])"
     Category="Output"
     F1Keyword="VC.Project.VCMidlTool.GenerateServerFiles">
    <EnumValue
       Name="Stub"
       Switch="server stub"
       DisplayName="Stub"
       Description="Stub">
    </EnumValue>
    <EnumValue
       Name="None"
       Switch="server none"
       DisplayName="None"
       Description="None">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="ClientStubFile"
     DisplayName="Client Stub File"
     Description="Specify the client stub file (/cstub [file])"
     Category="Output"
     Switch="cstub"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.ClientStubFile">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ServerStubFile"
     DisplayName="Server Stub File"
     Description="Specify the server stub file (/sstub [file])"
     Category="Output"
     Switch="sstub"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.ServerStubFile">
  </StringProperty>
  <EnumProperty
     Name="TypeLibFormat"
     DisplayName="Type Library Format"
     Description="Specifies the type library file format ([/oldtlb|/newtlb])"
     Category="Output"
     F1Keyword="VC.Project.VCMidlTool.TypeLibFormat">
    <EnumValue
       Name="NewFormat"
       Switch="newtlb"
       DisplayName="NewFormat"
       Description="New Format">
    </EnumValue>
    <EnumValue
       Name="OldFormat"
       Switch="oldtlb"
       DisplayName="OldFormat"
       Description="Old Format">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Name="CPreprocessOptions"
     DisplayName="C Preprocess Options"
     Description="Specifies switches to pass to C compiler preprocessor (/cpp_opt switches)"
     Category="Advanced"
     Switch="cpp_opt"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.CPreprocessOptions">
  </StringProperty>
  <StringListProperty
     Name="UndefinePreprocessorDefinitions"
     DisplayName="Undefine Preprocessor Definitions"
     Description="Specifies one or more undefines, including MIDL macros (/U[macros])"
     Category="Advanced"
     Switch="U"
     F1Keyword="VC.Project.VCMidlTool.UndefinePreprocessorDefinitions">
  </StringListProperty>
  <EnumProperty
     Name="EnableErrorChecks"
     DisplayName="Enable Error Checking"
     Description="Select error checking option ([/error all|none])"
     Category="Advanced"
     F1Keyword="VC.Project.VCMidlTool.EnableErrorChecks">
    <EnumValue
       Name="EnableCustom"
       Switch=""
       DisplayName="EnableCustom"
       Description="All">
    </EnumValue>
    <EnumValue
       Name="All"
       Switch="error all"
       DisplayName="All"
       Description="All">
    </EnumValue>
    <EnumValue
       Name="None"
       Switch="error none"
       DisplayName="None"
       Description="None">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="ErrorCheckAllocations"
     DisplayName="Check Allocations"
     Description="Check for out of memory errors (/error allocation)"
     Category="Advanced"
     Switch="error allocation"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckAllocations">
  </BoolProperty>
  <BoolProperty
     Name="ErrorCheckBounds"
     DisplayName="Check Bounds"
     Description="Check size vs transmission length specification (/error bounds_check)"
     Category="Advanced"
     Switch="error bounds_check"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckBounds">
  </BoolProperty>
  <BoolProperty
     Name="ErrorCheckEnumRange"
     DisplayName="Check Enum Range"
     Description="Check enum values to be in allowable range (/error enum)"
     Category="Advanced"
     Switch="error enum"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckEnumRange">
  </BoolProperty>
  <BoolProperty
     Name="ErrorCheckRefPointers"
     DisplayName="Check Reference Pointers"
     Description="Check ref pointers to be non-null (/error ref)"
     Category="Advanced"
     Switch="error ref"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckRefPointers">
  </BoolProperty>
  <BoolProperty
     Name="ErrorCheckStubData"
     DisplayName="Check Stub Data"
     Description="Emit additional check for server side stub data validity (/error stub_data)"
     Category="Advanced"
     Switch="error stub_data"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckStubData">
  </BoolProperty>
  <BoolProperty
     Name="Enumclass"
     DisplayName="Enable C++ Enum class"
     Description="Enable use of the C++ enum class construct (/enum_class)"
     Category="Advanced"
     Switch="enum_class"
     Visible="false"
     F1Keyword="VC.Project.VCMidlTool.ErrorCheckStubData">
  </BoolProperty>
  <BoolProperty
     Name="PrependWithABINamepsace"
     DisplayName="Prepend with 'ABI' namespace"
     Description="Prepend the 'ABI' namespace to all types.  (/ns_prefix)"
     Category="Advanced"
     Switch="ns_prefix"
     F1Keyword="VC.Project.VCMidlTool.PreendWithABINamepsace">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="no_robust"
     Name="ValidateAllParameters"
     DisplayName="Validate Parameters"
     Description="Generate additonal information to validate parameters (/robust|/no_robust)"
     Category="Advanced"
     Switch="robust"
     F1Keyword="VC.Project.VCMidlTool.ValidateParameters">
  </BoolProperty>
  <EnumProperty
     Name="StructMemberAlignment"
     DisplayName="Struct Member Alignment"
     Description="Specifies the packing level of structures in the target system (/ZpN)"
     Category="Advanced"
     F1Keyword="VC.Project.VCMidlTool.StructMemberAlignment">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Not Set">
    </EnumValue>
    <EnumValue
       Name="1"
       Switch="Zp1"
       DisplayName="1 Byte"
       Description="Zp1">
    </EnumValue>
    <EnumValue
       Name="2"
       Switch="Zp2"
       DisplayName="2 Byte"
       Description="Zp2">
    </EnumValue>
    <EnumValue
       Name="4"
       Switch="Zp4"
       DisplayName="4 Byte"
       Description="Zp4">
    </EnumValue>
    <EnumValue
       Name="8"
       Switch="Zp8"
       DisplayName="8 Byte"
       Description="Zp8">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="RedirectOutputAndErrors"
     DisplayName="Redirect Output"
     Description="Redirects output from screen to a file (/o file)"
     Category="Advanced"
     Switch="o"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.RedirectOutputAndErrors">
  </StringProperty>
  <StringProperty
     Name="MinimumTargetSystem"
     DisplayName="Minimum Target System"
     Description="Set the minimum target system (/target STRING)"
     Category="Advanced"
     Switch="target"
     Separator=" "
     F1Keyword="VC.Project.VCMidlTool.MinimumTargetSystem">
  </StringProperty>
  <StringProperty
     Name="AdditionalOptions"
     DisplayName="Additional Options"
     Description="Additional Options"
     Category="Command Line"
     F1Keyword="vc.project.AdditionalOptionsPage">
  </StringProperty>
  <StringProperty
     Subtype="folder"
     Name="TrackerLogDirectory"
     DisplayName="Tracker Log Directory"
     Description="Tracker Log Directory."
     IncludeInCommandLine="false"
     Visible="false">
  </StringProperty>
</Rule>