﻿<?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>
  <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>