﻿<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule
   Name="Link"
   PageTemplate="tool"
   DisplayName="Linker"
   SwitchPrefix="/"
   Order="20"
   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="Input"
       DisplayName="Input" />
    <Category
       Name="Manifest File"
       DisplayName="Manifest File" />
    <Category
       Name="Debugging"
       DisplayName="Debugging" />
    <Category
       Name="System"
       DisplayName="System" />
    <Category
       Name="Optimization"
       DisplayName="Optimization" />
    <Category
       Name="Embedded IDL"
       DisplayName="Embedded IDL" />
    <Category
       Name="Windows Metadata"
       DisplayName="Windows Metadata" />
    <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="Link"
       Label=""
       HasConfigurationCondition="true" />
  </Rule.DataSource>
  <StringProperty
     Subtype="file"
     Name="OutputFile"
     DisplayName="Output File"
     Description="The /OUT option overrides the default name and location of the program that the linker creates."
     Category="General"
     Switch="OUT"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.OutputFile">
  </StringProperty>
  <EnumProperty
     Name="ShowProgress"
     DisplayName="Show Progress"
     Description="Prints Linker Progress Messages"
     Category="General"
     F1Keyword="VC.Project.VCLinkerTool.ShowProgress">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="No verbosity.">
    </EnumValue>
    <EnumValue
       Name="LinkVerbose"
       Switch="VERBOSE"
       DisplayName="Display all progress messages"
       Description="Displays all progress messages. ">
    </EnumValue>
    <EnumValue
       Name="LinkVerboseLib"
       Switch="VERBOSE:Lib"
       DisplayName="For Libraries Searched"
       Description="Displays progress messages indicating just the libraries searched.">
    </EnumValue>
    <EnumValue
       Name="LinkVerboseICF"
       Switch="VERBOSE:ICF"
       DisplayName="About COMDAT folding during optimized linking"
       Description="Displays information about COMDAT folding during optimized linking.">
    </EnumValue>
    <EnumValue
       Name="LinkVerboseREF"
       Switch="VERBOSE:REF"
       DisplayName="About data removed during optimized linking"
       Description="Displays information about functions and data removed during optimized linking.">
    </EnumValue>
    <EnumValue
       Name="LinkVerboseSAFESEH"
       Switch="VERBOSE:SAFESEH"
       DisplayName="About Modules incompatible with SEH"
       Description="Displays information about modoules incompatible with Safe Exception Handling.">
    </EnumValue>
    <EnumValue
       Name="LinkVerboseCLR"
       Switch="VERBOSE:CLR"
       DisplayName="About linker activity related to managed code"
       Description="Display information about linker activity related to managed code.">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Name="Version"
     DisplayName="Version"
     Description="The /VERSION option tells the linker to put a version number in the header of the .exe or .dll file. Use DUMPBIN /HEADERS to see the image version field of the OPTIONAL HEADER VALUES to see the effect of /VERSION."
     Category="General"
     Switch="VERSION"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.Version">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="INCREMENTAL:NO"
     Name="LinkIncremental"
     DisplayName="Enable Incremental Linking"
     Description="Enables incremental linking.     (/INCREMENTAL, /INCREMENTAL:NO)"
     Category="General"
     Switch="INCREMENTAL"
     F1Keyword="VC.Project.VCLinkerTool.LinkIncremental">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="IncrementalLinkDatabaseFile"
     DisplayName="Incremental Link Database File"
     Description="Specifies incremental link database file location.   (/ILK:[name])"
     Category="General"
     Switch="ILK:"
     F1Keyword="VC.Project.VCLinkerTool.IncrementalLinkDatabaseFile">
  </StringProperty>
  <BoolProperty
     Name="SuppressStartupBanner"
     DisplayName="Suppress Startup Banner"
     Description="The /NOLOGO option prevents display of the copyright message and version number. "
     Category="General"
     Switch="NOLOGO"
     F1Keyword="VC.Project.VCLinkerTool.SuppressStartupBanner">
  </BoolProperty>
  <BoolProperty
     Name="IgnoreImportLibrary"
     DisplayName="Ignore Import Library"
     Description="Specifies that the import library generated by this configuration should not be imported into dependent projects."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCLinkerTool.IgnoreImportLibrary">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     Name="RegisterOutput"
     DisplayName="Register Output"
     Description="Specifies whether to register the primary output of this build."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCLinkerTool.RegisterOutput">
  </BoolProperty>
  <BoolProperty
     Name="PerUserRedirection"
     DisplayName="Per-user Redirection"
     Description="When Register Output is enabled, Per-user redirection forces registry writes to HKEY_CLASSES_ROOT to be redirected to HKEY_CURRENT_USER."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCLinkerTool.PerUserRedirection">
  </BoolProperty>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalLibraryDirectories"
     DisplayName="Additional Library Directories"
     Description="Allows the user to override the environmental library path. (/LIBPATH:folder)"
     Category="General"
     Switch="LIBPATH:"
     F1Keyword="VC.Project.VCLinkerTool.AdditionalLibraryDirectories">
  </StringListProperty>
  <BoolProperty
     Name="LinkLibraryDependencies"
     DisplayName="Link Library Dependencies"
     Description="Specifies whether or not library outputs from project dependencies are automatically linked in."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCLinkerTool.LinkLibraryDependencies">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType="ProjectReference"
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     Name="UseLibraryDependencyInputs"
     DisplayName="Use Library Dependency Inputs"
     Description="Specifies whether or not the inputs to the librarian tool are used rather than the library file itself when linking in library outputs of project dependencies."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCLinkerTool.UseLibraryDependencyInputs">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType="ProjectReference"
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="LTCG:NOSTATUS"
     Name="LinkStatus"
     DisplayName="Link Status"
     Description="Specifies whether the linker should display a progress indicator showing what percentage of the link is complete. The default is to not display this status information. (/LTCG:STATUS|LTCG:NOSTATUS)"
     Category="General"
     Switch="LTCG:STATUS"
     F1Keyword="VC.Project.VCLinkerTool.LinkStatus">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="ALLOWBIND:NO"
     Name="PreventDllBinding"
     DisplayName="Prevent Dll Binding"
     Description="/ALLOWBIND:NO sets a bit in a DLL's header that indicates to Bind.exe that the image is not allowed to be bound. You may not want a DLL to be bound if it has been digitally signed (binding invalidates the signature)."
     Category="General"
     Switch="ALLOWBIND"
     F1Keyword="VC.Project.VCLinkerTool.PreventDLLBinding">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="WX:NO"
     Name="TreatLinkerWarningAsErrors"
     DisplayName="Treat Linker Warning As Errors"
     Description="/WX causes no output file to be generated if the linker generates a warning."
     Category="General"
     Switch="WX"
     F1Keyword="VC.Project.VCLinkerTool.TreatLinkerWarningsAsErrors">
  </BoolProperty>
  <StringListProperty
     Subtype="file"
     Name="Natvis"
     DisplayName="Natvis files"
     Description="Natvis files to add to the pdb"
     Category="General"
     Switch="NATVIS:"
     Visible="false"
     F1Keyword="natvis">
  </StringListProperty>
  <EnumProperty
     Name="ForceFileOutput"
     DisplayName="Force File Output"
     Description="The /FORCE option tells the linker to create an .exe file or DLL even if a symbol is referenced but not defined or is multiply defined. It may create invalid exe file."
     Category="General"
     F1Keyword="VC.Project.VCLinkerTool.ForceFileOutput">
    <EnumValue
       Name="Enabled"
       Switch="FORCE"
       DisplayName="Enabled"
       Description="/FORCE with no arguments implies both multiple and unresolved.">
    </EnumValue>
    <EnumValue
       Name="MultiplyDefinedSymbolOnly"
       Switch="FORCE:MULTIPLE"
       DisplayName="Multiply Defined Symbol Only"
       Description="Use /FORCE:MULTIPLE to create an output file whether or not LINK finds more than one definition for a symbol.">
    </EnumValue>
    <EnumValue
       Name="UndefinedSymbolOnly"
       Switch="FORCE:UNRESOLVED"
       DisplayName="Undefined Symbol Only"
       Description="Use /FORCE:UNRESOLVED to create an output file whether or not LINK finds an undefined symbol. /FORCE:UNRESOLVED is ignored if the entry point symbol is unresolved.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="CreateHotPatchableImage"
     DisplayName="Create Hot Patchable Image"
     Description="Prepares an image for hotpatching."
     Category="General"
     F1Keyword="VC.Project.VCLinkerTool.CreateHotPatchableImage">
    <EnumValue
       Name="Enabled"
       Switch="FUNCTIONPADMIN"
       DisplayName="Enabled"
       Description="Prepares an image for hotpatching.">
    </EnumValue>
    <EnumValue
       Name="X86Image"
       Switch="FUNCTIONPADMIN:5"
       DisplayName="X86 Image Only"
       Description="Prepares an X86 image for hotpatching.">
    </EnumValue>
    <EnumValue
       Name="X64Image"
       Switch="FUNCTIONPADMIN:6"
       DisplayName="X64 Image Only"
       Description="Prepares an X64 image for hotpatching.">
    </EnumValue>
    <EnumValue
       Name="ItaniumImage"
       Switch="FUNCTIONPADMIN:16"
       DisplayName="Itanium Image Only"
       Description="Prepares an Itanium image for hotpatching.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty
     Name="SpecifySectionAttributes"
     DisplayName="Specify Section Attributes"
     Description="The /SECTION option changes the attributes of a section, overriding the attributes set when the .obj file for the section was compiled."
     Category="General"
     Switch="SECTION:"
     F1Keyword="VC.Project.VCLinkerTool.SpecifySectionAttributes">
  </StringListProperty>
  <StringProperty
     Subtype="file"
     Name="MSDOSStubFileName"
     DisplayName="MS-DOS Stub File Name"
     Description="The /STUB option attaches an MS-DOS stub program to a Win32 program. "
     Category="General"
     Switch="STUB"
     Separator=":"
     Visible="false">
  </StringProperty>
  <StringProperty
     Subtype="folder"
     Name="TrackerLogDirectory"
     DisplayName="Tracker Log Directory"
     Description="Tracker log directory."
     Category="General"
     IncludeInCommandLine="false"
     Visible="false">
  </StringProperty>
  <StringListProperty
     Subtype="file"
     Name="AdditionalDependencies"
     DisplayName="Additional Dependencies"
     Description="Specifies additional items to add to the link command line. [i.e. kernel32.lib] "
     Category="Input"
     F1Keyword="VC.Project.VCLinkerTool.AdditionalDependencies">
  </StringListProperty>
  <BoolProperty
     Name="IgnoreAllDefaultLibraries"
     DisplayName="Ignore All Default Libraries"
     Description="The /NODEFAULTLIB option tells the linker to remove one or more default libraries from the list of libraries it searches when resolving external references. "
     Category="Input"
     Switch="NODEFAULTLIB"
     F1Keyword="VC.Project.VCLinkerTool.IgnoreAllDefaultLibraries">
  </BoolProperty>
  <StringListProperty
     Subtype="file"
     Name="IgnoreSpecificDefaultLibraries"
     DisplayName="Ignore Specific Default Libraries"
     Description="Specifies one or more names of default libraries to ignore; separate multiple libraries with semi-colons.     (/NODEFAULTLIB:[name, name, ...])"
     Category="Input"
     Switch="NODEFAULTLIB:"
     F1Keyword="VC.Project.VCLinkerTool.IgnoreDefaultLibraryNames">
  </StringListProperty>
  <StringProperty
     Subtype="file"
     Name="ModuleDefinitionFile"
     DisplayName="Module Definition File"
     Description="The /DEF option passes a module-definition file (.def) to the linker. Only one .def file can be specified to LINK. "
     Category="Input"
     Switch="DEF"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.ModuleDefinitionFile">
  </StringProperty>
  <StringListProperty
     Subtype="file"
     Name="AddModuleNamesToAssembly"
     DisplayName="Add Module to Assembly"
     Description="The /ASSEMBLYMODULE option allows you to add a module reference to an assembly. Type information in the module will not be available to the assembly program that added the module reference. However, type information in the module will be available to any program that references the assembly."
     Category="Input"
     Switch="ASSEMBLYMODULE:"
     F1Keyword="VC.Project.VCLinkerTool.AddModuleNamesToAssembly">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="EmbedManagedResourceFile"
     DisplayName="Embed Managed Resource File"
     Description="/ASSEMBLYRESOURCE embeds a resource file in the output file."
     Category="Input"
     Switch="ASSEMBLYRESOURCE:"
     F1Keyword="VC.Project.VCLinkerTool.EmbedManagedResourceFile">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="ForceSymbolReferences"
     DisplayName="Force Symbol References"
     Description="The /INCLUDE option tells the linker to add a specified symbol to the symbol table."
     Category="Input"
     Switch="INCLUDE:"
     F1Keyword="VC.Project.VCLinkerTool.ForceSymbolReferences">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="DelayLoadDLLs"
     DisplayName="Delay Loaded Dlls"
     Description="The /DELAYLOAD option causes delayed loading of DLLs. The dllname specifies a DLL to delay load. "
     Category="Input"
     Switch="DELAYLOAD:"
     F1Keyword="VC.Project.VCLinkerTool.DelayLoadDLLS">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="AssemblyLinkResource"
     DisplayName="Assembly Link Resource"
     Description="The /ASSEMBLYLINKRESOURCE option creates a link to a .NET Framework resource in the output file; the resource file is not placed in the output file. "
     Category="Input"
     Switch="ASSEMBLYLINKRESOURCE:"
     F1Keyword="VC.Project.VCLinkerTool.AssemblyLinkResource">
  </StringListProperty>
  <BoolProperty
     ReverseSwitch="MANIFEST:NO"
     Name="GenerateManifest"
     DisplayName="Generate Manifest"
     Description="/MANIFEST specifies that the linker should create a side-by-side manifest file."
     Category="Manifest File"
     Switch="MANIFEST"
     F1Keyword="VC.Project.VCLinkerTool.GenerateManifest">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="ManifestFile"
     DisplayName="Manifest File"
     Description="/MANIFESTFILE lets you change the default name of the manifest file. The default name of the manifest file is the file name with .manifest appended."
     Category="Manifest File"
     Switch="ManifestFile"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.ManifestFile">
  </StringProperty>
  <StringListProperty
     Subtype="file"
     Name="AdditionalManifestDependencies"
     DisplayName="Additional Manifest Dependencies"
     Description="/MANIFESTDEPENDENCY lets you specify attributes that will be placed in the dependency section of the manifest file."
     Category="Manifest File"
     Switch="MANIFESTDEPENDENCY:"
     F1Keyword="VC.Project.VCLinkerTool.AdditionalManifestDependencies">
  </StringListProperty>
  <BoolProperty
     ReverseSwitch="ALLOWISOLATION:NO"
     Name="AllowIsolation"
     DisplayName="Allow Isolation"
     Description="Specifies behavior for manifest lookup. (/ALLOWISOLATION:NO)"
     Category="Manifest File"
     F1Keyword="VC.Project.VCLinkerTool.AllowIsolation">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="MANIFESTUAC:NO"
     Name="EnableUAC"
     DisplayName="Enable User Account Control (UAC)"
     Description="Specifies whether or not User Account Control is enabled.  (/MANIFESTUAC, /MANIFESTUAC:NO)"
     Category="Manifest File"
     Switch="MANIFESTUAC:"
     F1Keyword="VC.Project.VCLinkerTool.EnableUAC">
    <Argument
       Property="UACExecutionLevel"
       IsRequired="true" />
    <Argument
       Property="UACUIAccess"
       IsRequired="true"
       Separator=" " />
  </BoolProperty>
  <EnumProperty
     Name="UACExecutionLevel"
     DisplayName="UAC Execution Level"
     Description="Specifies the requested execution level for the application when running with User Account Control.  (/MANIFESTUAC:level=[value])"
     SwitchPrefix=""
     Category="Manifest File"
     F1Keyword="VC.Project.VCLinkerTool.UACExecutionLevel">
    <EnumValue
       Name="AsInvoker"
       Switch="level='asInvoker'"
       DisplayName="asInvoker"
       Description="UAC Execution Level: as invoker.">
    </EnumValue>
    <EnumValue
       Name="HighestAvailable"
       Switch="level='highestAvailable'"
       DisplayName="highestAvailable"
       Description="UAC Execution Level: highest available.">
    </EnumValue>
    <EnumValue
       Name="RequireAdministrator"
       Switch="level='requireAdministrator'"
       DisplayName="requireAdministrator"
       Description="UAC Execution Level: require administrator.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="uiAccess='false'"
     Name="UACUIAccess"
     DisplayName="UAC Bypass UI Protection"
     Description="UAC Bypass UI Protection : Specifies whether or not to bypass user interface protection levels for other windows on the desktop.  Set this property to 'Yes' only for accessibility applications.  (/MANIFESTUAC:uiAccess=[true | false])"
     SwitchPrefix=""
     Category="Manifest File"
     Switch="uiAccess='true'"
     F1Keyword="VC.Project.VCLinkerTool.UACUIAccess">
  </BoolProperty>
  <BoolProperty
     Name="ManifestEmbed"
     DisplayName="Embed Manifest"
     Description="Specifies if the manifest file should be embedded in the assembly or created as a stand-alone file."
     Category="Manifest File"
     Switch="manifest:embed"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.ManifestEmbed">
  </BoolProperty>
  <StringListProperty
     Subtype="folder"
     Name="ManifestInput"
     DisplayName="Manifest Input"
     Description="Used to specify manifests that need to be embedded."
     Category="Manifest File"
     Switch="manifestinput:"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.ManifestInput">
  </StringListProperty>
  <EnumProperty
     Name="GenerateDebugInformation"
     DisplayName="Generate Debug Info"
     Description="This option enables creation of debugging information for the .exe file or the DLL."
     Category="Debugging"
     F1Keyword="VC.Project.VCLinkerTool.GenerateDebugInformation">
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No"
       Description="Produces no debugging information.">
    </EnumValue>
    <EnumValue
       Name="true"
       Switch="DEBUG"
       DisplayName="Generate Debug Information"
       Description="Create a complete Program Database (PDB) ideal for distribution to Microsoft Symbol Server.">
    </EnumValue>
    <EnumValue
       Name="DebugFastLink"
       Switch="DEBUG:FASTLINK"
       DisplayName="Generate Debug Information optimized for faster links"
       Description="Produces a program database (PDB) ideal for edit-link-debug cycle. ">
    </EnumValue>
    <EnumValue
       Name="DebugFull"
       Switch="DEBUG:FULL"
       DisplayName="Generate Debug Information optimized for sharing and publishing"
       Description="Produces a program database (PDB) ideal for edit-link-debug cycle. ">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="ProgramDatabaseFile"
     DisplayName="Generate Program Database File"
     Description="By default, when /DEBUG is specified, the linker creates a program database (PDB) which holds debugging information. The default file name for the PDB has the base name of the program and the extension .pdb."
     Category="Debugging"
     Switch="PDB"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.ProgramDatabaseFile">
  </StringProperty>
  <BoolProperty
     Name="FullProgramDatabaseFile"
     DisplayName="Generate Full Program Database File"
     Description="This option generates a full PDB from a partial PDB generated when /Debug:fastlink is specified. Full PDB allows sharing the binary and the PDB with others."
     Category="Debugging"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.FullProgramDatabaseFile">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="StripPrivateSymbols"
     DisplayName="Strip Private Symbols"
     Description="The /PDBSTRIPPED option creates a second program database (PDB) file when you build your program image with any of the compiler or linker options that generate a PDB file (/DEBUG, /Z7, /Zd, or /Zi)."
     Category="Debugging"
     Switch="PDBSTRIPPED"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.StripPrivateSymbols">
  </StringProperty>
  <BoolProperty
     Name="GenerateMapFile"
     DisplayName="Generate Map File"
     Description="The /MAP option tells the linker to create a mapfile."
     Category="Debugging"
     Switch="MAP"
     F1Keyword="VC.Project.VCLinkerTool.GenerateMapFile">
    <Argument
       Property="MapFileName"
       IsRequired="false" />
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="MapFileName"
     DisplayName="Map File Name"
     Description="A user-specified name for the mapfile. It replaces the default name."
     Category="Debugging"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.MapFileName">
  </StringProperty>
  <BoolProperty
     Name="MapExports"
     DisplayName="Map Exports"
     Description="The /MAPINFO option tells the linker to include the specified information in a mapfile, which is created if you specify the /MAP option. EXPORTS tells the linker to include exported functions."
     Category="Debugging"
     Switch="MAPINFO:EXPORTS"
     F1Keyword="VC.Project.VCLinkerTool.MapExports">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="ASSEMBLYDEBUG:DISABLE"
     Name="AssemblyDebug"
     DisplayName="Debuggable Assembly"
     Description="/ASSEMBLYDEBUG emits the DebuggableAttribute attribute with debug information tracking and disables JIT optimizations."
     Category="Debugging"
     Switch="ASSEMBLYDEBUG"
     F1Keyword="VC.Project.VCLinkerTool.AssemblyDebug">
  </BoolProperty>
  <BoolProperty
     Name="UseDynamicDebugging"
     DisplayName="Support C++ Dynamic Debugging"
     Description="(Preview) Set linker flag /dynamicdeopt to turn on C++ Dynamic Debugging. Place deoptimized breakpoints and step in anywhere with on-demand function deoptimization. Use this mode for debugging optimized code."
     Category="Debugging"
     Switch="dynamicdeopt"
     F1Keyword="VC.Project.VCLinkerTool.GenerateDynamicDeoptInformation">
  </BoolProperty>
  <StringProperty
     Name="DynamicDebuggingSuffix"
     Category="Debugging"
     Switch="dynamicdeopt:suffix"
     Separator="="
     Visible="false">
  </StringProperty>
  <EnumProperty
     Name="SubSystem"
     DisplayName="SubSystem"
     Description="The /SUBSYSTEM option tells the operating system how to run the .exe file.The choice of subsystem affects the entry point symbol (or entry point function) that the linker will choose."
     Category="System"
     F1Keyword="VC.Project.VCLinkerTool.SubSystem">
    <EnumProperty.Arguments>
      <Argument
         Property="MinimumRequiredVersion"
         IsRequired="false" />
    </EnumProperty.Arguments>
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="No subsystem set.">
    </EnumValue>
    <EnumValue
       Name="Console"
       Switch="SUBSYSTEM:CONSOLE"
       DisplayName="Console"
       Description="Win32 character-mode application. Console applications are given a console by the operating system. If main or wmain is defined, CONSOLE is the default.">
    </EnumValue>
    <EnumValue
       Name="Windows"
       Switch="SUBSYSTEM:WINDOWS"
       DisplayName="Windows"
       Description="Application does not require a console, probably because it creates its own windows for interaction with the user. If WinMain or wWinMain is defined, WINDOWS is the default.">
    </EnumValue>
    <EnumValue
       Name="Native"
       Switch="SUBSYSTEM:NATIVE"
       DisplayName="Native"
       Description="Device drivers for Windows NT. If /DRIVER:WDM is specified, NATIVE is the default.">
    </EnumValue>
    <EnumValue
       Name="EFI Application"
       Switch="SUBSYSTEM:EFI_APPLICATION"
       DisplayName="EFI Application"
       Description="EFI Application.">
    </EnumValue>
    <EnumValue
       Name="EFI Boot Service Driver"
       Switch="SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER"
       DisplayName="EFI Boot Service Driver"
       Description="EFI Boot Service Driver.">
    </EnumValue>
    <EnumValue
       Name="EFI ROM"
       Switch="SUBSYSTEM:EFI_ROM"
       DisplayName="EFI ROM"
       Description="EFI ROM.">
    </EnumValue>
    <EnumValue
       Name="EFI Runtime"
       Switch="SUBSYSTEM:EFI_RUNTIME_DRIVER"
       DisplayName="EFI Runtime"
       Description="EFI Runtime.">
    </EnumValue>
    <EnumValue
       Name="POSIX"
       Switch="SUBSYSTEM:POSIX"
       DisplayName="POSIX"
       Description="Application that runs with the POSIX subsystem in Windows NT.">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Name="MinimumRequiredVersion"
     DisplayName="Minimum Required Version"
     Description="Specify the minimum required version of the subsystem. The arguments are decimal numbers in the range 0 through 65,535."
     Category="System"
     Separator=","
     F1Keyword="VC.Project.VCLinkerTool.MinimumRequiredVersion">
  </StringProperty>
  <StringProperty
     Name="HeapReserveSize"
     DisplayName="Heap Reserve Size"
     Description="Specifies total heap allocation size in virtual memory. Default is 1MB.    (/HEAP:reserve)"
     Category="System"
     Switch="HEAP"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.HeapReserveSize">
    <Argument
       Property="HeapCommitSize"
       IsRequired="false"
       Separator="," />
  </StringProperty>
  <StringProperty
     Name="HeapCommitSize"
     DisplayName="Heap Commit Size"
     Description="Specifies total heap allocation size in physical memory. Default is 4KB.    (/HEAP:reserve,commit)"
     Category="System"
     F1Keyword="VC.Project.VCLinkerTool.HeapCommitSize">
  </StringProperty>
  <StringProperty
     Name="StackReserveSize"
     DisplayName="Stack Reserve Size"
     Description="Specifies the total stack allocation size in virtual memory. Default is 1MB.     (/STACK:reserve)"
     Category="System"
     Switch="STACK"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.StackReserveSize">
    <Argument
       Property="StackCommitSize"
       IsRequired="false"
       Separator="," />
  </StringProperty>
  <StringProperty
     Name="StackCommitSize"
     DisplayName="Stack Commit Size"
     Description="Specifies the total stack allocation size in physical memory. Default is 4KB.     (/STACK:reserve,commit)"
     Category="System"
     F1Keyword="VC.Project.VCLinkerTool.StackCommitSize">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="LARGEADDRESSAWARE:NO"
     Name="LargeAddressAware"
     DisplayName="Enable Large Addresses"
     Description="The /LARGEADDRESSAWARE option tells the linker that the application can handle addresses larger than 2 gigabytes. By default, /LARGEADDRESSAWARE:NO is enabled if /LARGEADDRESSAWARE is not otherwise specified on the linker line."
     Category="System"
     Switch="LARGEADDRESSAWARE"
     F1Keyword="VC.Project.VCLinkerTool.LargeAddressAware">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="TSAWARE:NO"
     Name="TerminalServerAware"
     DisplayName="Terminal Server"
     Description="The /TSAWARE option sets a flag in the IMAGE_OPTIONAL_HEADER DllCharacteristics field in the program image's optional header. When this flag is set, Terminal Server will not make certain changes to the application."
     Category="System"
     Switch="TSAWARE"
     F1Keyword="VC.Project.VCLinkerTool.TerminalServerAware">
  </BoolProperty>
  <BoolProperty
     Name="SwapRunFromCD"
     DisplayName="Swap Run From CD"
     Description="The /SWAPRUN option tells the operating system to first copy the linker output to a swap file, and then run the image from there. This is a Windows NT 4.0 (and later) feature.When CD is specified, the operating system will copy the image on a removable disk to a page file and then load it."
     Category="System"
     Switch="SWAPRUN:CD"
     F1Keyword="VC.Project.VCLinkerTool.SwapRunFromCD">
  </BoolProperty>
  <BoolProperty
     Name="SwapRunFromNET"
     DisplayName="Swap Run From Network"
     Description="The /SWAPRUN option tells the operating system to first copy the linker output to a swap file, and then run the image from there. This is a Windows NT 4.0 (and later) feature. If NET is specified, the operating system will first copy the binary image from the network to a swap file and load it from there. This option is useful for running applications over the network."
     Category="System"
     Switch="SWAPRUN:NET"
     F1Keyword="VC.Project.VCLinkerTool.SwapRunFromNet">
  </BoolProperty>
  <EnumProperty
     Name="Driver"
     DisplayName="Driver"
     Description="Use the /DRIVER linker option to build a Windows NT kernel mode driver."
     Category="System"
     F1Keyword="VC.Project.VCLinkerTool.driver">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Default driver setting.">
    </EnumValue>
    <EnumValue
       Name="Driver"
       Switch="Driver"
       DisplayName="Driver"
       Description="Driver">
    </EnumValue>
    <EnumValue
       Name="UpOnly"
       Switch="DRIVER:UPONLY"
       DisplayName="UP Only"
       Description="/DRIVER:UPONLY causes the linker to add the IMAGE_FILE_UP_SYSTEM_ONLY bit to the characteristics in the output header to specify that it is a uniprocessor (UP) driver. The operating system will refuse to load a UP driver on a multiprocessor (MP) system.">
    </EnumValue>
    <EnumValue
       Name="WDM"
       Switch="DRIVER:WDM"
       DisplayName="WDM"
       Description="/DRIVER:WDM causes the linker to set the IMAGE_DLLCHARACTERISTICS_WDM_DRIVER bit in the optional header's DllCharacteristics field.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="OPT:NOREF"
     Name="OptimizeReferences"
     DisplayName="References"
     Description="/OPT:REF eliminates functions and/or data that are never referenced while /OPT:NOREF keeps functions and/or data that are never referenced. "
     Category="Optimization"
     Switch="OPT:REF"
     F1Keyword="VC.Project.VCLinkerTool.OptimizeReferences">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="OPT:NOICF"
     Name="EnableCOMDATFolding"
     DisplayName="Enable COMDAT Folding"
     Description="Use /OPT:ICF[=iterations] to perform identical COMDAT folding. "
     Category="Optimization"
     Switch="OPT:ICF"
     F1Keyword="VC.Project.VCLinkerTool.EnableCOMDATFolding">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="FunctionOrder"
     DisplayName="Function Order"
     Description="The /ORDER option tells LINK to optimize your program by placing certain COMDATs into the image in a predetermined order. LINK places the functions in the specified order within each section in the image."
     Category="Optimization"
     Switch="ORDER"
     Separator=":@"
     F1Keyword="VC.Project.VCLinkerTool.FunctionOrder">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ProfileGuidedDatabase"
     DisplayName="Profile Guided Database"
     Description="Specify .pgd file for profile guided optimizations. (/PGD)"
     Category="Optimization"
     Switch="PGD"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.ProfileGuidedDatabase">
  </StringProperty>
  <EnumProperty
     Name="LinkTimeCodeGeneration"
     DisplayName="Link Time Code Generation"
     Description="Specifies link-time code generation."
     Category="Optimization"
     F1Keyword="VC.Project.VCLinkerTool.LinkTimeCodeGeneration">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default LTCG setting.">
    </EnumValue>
    <EnumValue
       Name="UseFastLinkTimeCodeGeneration"
       Switch="LTCG:incremental"
       DisplayName="Use Fast Link Time Code Generation"
       Description="Use Link Time Code Generation.">
    </EnumValue>
    <EnumValue
       Name="UseLinkTimeCodeGeneration"
       Switch="LTCG"
       DisplayName="Use Link Time Code Generation"
       Description="Use Link Time Code Generation.">
    </EnumValue>
    <EnumValue
       Name="PGInstrument"
       Switch="LTCG:PGInstrument"
       DisplayName="Profile Guided Optimization - Instrument"
       Description="Specifies link-time code generation.">
    </EnumValue>
    <EnumValue
       Name="PGOptimization"
       Switch="LTCG:PGOptimize"
       DisplayName="Profile Guided Optimization - Optimization"
       Description="Specifies that the linker should use the profile data created after running the instrumented binary to create an optimized image.">
    </EnumValue>
    <EnumValue
       Name="PGUpdate"
       Switch="LTCG:PGUpdate"
       DisplayName="Profile Guided Optimization - Update"
       Description="Allows and tracks list of input files to be added or modified from what was specified in the :PGINSTRUMENT phase.">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="LinkTimeCodeGenerationObjectFile"
     DisplayName="Link Time Code Generation Object File"
     Description="Specifies .iobj file loctaion. (/LTCGOUT:[name])"
     Category="Optimization"
     Switch="LTCGOUT:"
     F1Keyword="VC.Project.VCLinkerTool.LinkTimeCodeGenerationObjectFile">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="MidlCommandFile"
     DisplayName="MIDL Commands"
     Description="Specify MIDL command line Options. (/MIDL:@responsefile)"
     Category="Embedded IDL"
     Switch="MIDL"
     Separator=":@"
     F1Keyword="VC.Project.VCLinkerTool.MidlCommandFile">
  </StringProperty>
  <BoolProperty
     Name="IgnoreEmbeddedIDL"
     DisplayName="Ignore Embedded IDL"
     Description="The /IGNOREIDL option specifies that any IDL attributes in source code should not be processed into an .idl file."
     Category="Embedded IDL"
     Switch="IGNOREIDL"
     F1Keyword="VC.Project.VCLinkerTool.IgnoreEmbeddedIDL">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="MergedIDLBaseFileName"
     DisplayName="Merged IDL Base File Name"
     Description="The /IDLOUT option specifies the name and extension of the .idl file."
     Category="Embedded IDL"
     Switch="IDLOUT"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.MergedIDLBaseFileName">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="TypeLibraryFile"
     DisplayName="Type Library"
     Description="The /TLBOUT option specifies the name and extension of the .tlb file."
     Category="Embedded IDL"
     Switch="TLBOUT"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.TypeLibraryFile">
  </StringProperty>
  <IntProperty
     Name="TypeLibraryResourceID"
     DisplayName="TypeLib Resource ID"
     Description="Allows you to specify the resource ID of the linker-generated type library. (/TLBID:id)"
     Category="Embedded IDL"
     Switch="TLBID"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.TypeLibraryResourceID">
  </IntProperty>
  <BoolProperty
     Name="AppContainer"
     Category="Windows Metadata"
     Switch="APPCONTAINER"
     Visible="false">
  </BoolProperty>
  <EnumProperty
     Name="GenerateWindowsMetadata"
     DisplayName="Generate Windows Metadata"
     Description="Enables or disable generation of Windows Metadata."
     Category="Windows Metadata"
     F1Keyword="VC.Project.VCLinkerTool.GenerateWindowsMetadata">
    <EnumValue
       Name="true"
       Switch="WINMD"
       DisplayName="Yes"
       Description="Enable generation of Windows Metadata files.">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch="WINMD:NO"
       DisplayName="No"
       Description="Disable the generation of Windows Metadata files.">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="WindowsMetadataFile"
     DisplayName="Windows Metadata File"
     Description="The /WINMDFILE option switch."
     Category="Windows Metadata"
     Switch="WINMDFILE"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.GenerateWindowsMetadataFile">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="WindowsMetadataLinkKeyFile"
     DisplayName="Windows Metadata Key File"
     Description="Specify key or key pair to sign an Windows Metadata. (/WINMDKEYFILE:filename)"
     Category="Windows Metadata"
     Switch="WINMDKEYFILE"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.WINMDKeyFile">
    <StringProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="WindowsMetadataKeyContainer"
     DisplayName="Windows Metadata Key Container"
     Description="Specify a key container to sign an Windows Metadata. (/WINMDKEYCONTAINER:name)"
     Category="Windows Metadata"
     Switch="WINMDKEYCONTAINER"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.WINMDKEYCONTAINER">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="WINMDDELAYSIGN:NO"
     Name="WindowsMetadataLinkDelaySign"
     DisplayName="Windows Metadata Delay Sign"
     Description="Partially sign an Windows Metadata. Use /WINMDDELAYSIGN if you only want to place the public key in the Windows Metadata. The default is /WINMDDELAYSIGN:NO."
     Category="Windows Metadata"
     Switch="WINMDDELAYSIGN"
     F1Keyword="VC.Project.VCLinkerTool.WINMDDelaySign">
  </BoolProperty>
  <EnumProperty
     Name="WindowsMetadataSignHash"
     DisplayName="Windows Metadata Sign Hash"
     Description="Specifies to Linker the algorithm for hashing the signing key. ( /WINMDSIGNHASH : [ SHA1 | SHA256| SHA384| SHA512] )."
     Category="Windows Metadata"
     Switch="WINMDSIGNHASH:"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.WINMDSignHash">
    <EnumValue
       Name="SHA1"
       Switch="WINMDSIGNHASH:SHA1"
       DisplayName="SHA1">
    </EnumValue>
    <EnumValue
       Name="SHA256"
       Switch="WINMDSIGNHASH:SHA256"
       DisplayName="SHA256">
    </EnumValue>
    <EnumValue
       Name="SHA384"
       Switch="WINMDSIGNHASH:SHA384"
       DisplayName="SHA384">
    </EnumValue>
    <EnumValue
       Name="SHA512"
       Switch="WINMDSIGNHASH:SHA512"
       DisplayName="SHA512">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Name="EntryPointSymbol"
     DisplayName="Entry Point"
     Description="The /ENTRY option specifies an entry point function as the starting address for an .exe file or DLL."
     Category="Advanced"
     Switch="ENTRY"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.EntryPointSymbol">
  </StringProperty>
  <BoolProperty
     Name="NoEntryPoint"
     DisplayName="No Entry Point"
     Description="The /NOENTRY option is required for creating a resource-only DLL.Use this option to prevent LINK from linking a reference to _main into the DLL."
     Category="Advanced"
     Switch="NOENTRY"
     F1Keyword="VC.Project.VCLinkerTool.ResourceOnlyDLL">
  </BoolProperty>
  <BoolProperty
     Name="SetChecksum"
     DisplayName="Set Checksum"
     Description="The /RELEASE option sets the Checksum in the header of an .exe file."
     Category="Advanced"
     Switch="RELEASE"
     F1Keyword="VC.Project.VCLinkerTool.SetChecksum">
  </BoolProperty>
  <StringProperty
     Name="BaseAddress"
     DisplayName="Base Address"
     Description="Sets a base address for the program. (/BASE:{address[,size] | @filename,key})"
     Category="Advanced"
     Switch="BASE"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.BaseAddress">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="DYNAMICBASE:NO"
     Name="RandomizedBaseAddress"
     DisplayName="Randomized Base Address"
     Description="Randomized Base Address. (/DYNAMICBASE[:NO])"
     Category="Advanced"
     Switch="DYNAMICBASE"
     F1Keyword="VC.Project.VCLinkerTool.RandomizedBaseAddress">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="FIXED:NO"
     Name="FixedBaseAddress"
     DisplayName="Fixed Base Address"
     Description="Creates a program that can be loaded only at its preferred base address. (/FIXED[:NO])"
     Category="Advanced"
     Switch="FIXED"
     F1Keyword="VC.Project.VCLinkerTool.FixedBaseAddress">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="NXCOMPAT:NO"
     Name="DataExecutionPrevention"
     DisplayName="Data Execution Prevention (DEP)"
     Description="Marks an executable as having been tested to be compatible with Windows Data Execution Prevention feature. (/NXCOMPAT[:NO])"
     Category="Advanced"
     Switch="NXCOMPAT"
     F1Keyword="VC.Project.VCLinkerTool.DataExecutionPrevention">
  </BoolProperty>
  <BoolProperty
     Name="TurnOffAssemblyGeneration"
     DisplayName="Turn Off Assembly Generation"
     Description="The /NOASSEMBLY option tells the linker to create an image for the current output file without a .NET Framework assembly."
     Category="Advanced"
     Switch="NOASSEMBLY"
     F1Keyword="VC.Project.VCLinkerTool.TurnOffAssemblyGeneration">
  </BoolProperty>
  <BoolProperty
     Name="SupportUnloadOfDelayLoadedDLL"
     DisplayName="Unload delay loaded DLL"
     Description="The UNLOAD qualifier tells the delay-load helper function to support explicit unloading of the DLL. (/DELAY:UNLOAD)"
     Category="Advanced"
     Switch="DELAY:UNLOAD"
     F1Keyword="VC.Project.VCLinkerTool.SupportUnloadOfDelayLoadedDLL">
  </BoolProperty>
  <BoolProperty
     Name="SupportNobindOfDelayLoadedDLL"
     DisplayName="Nobind delay loaded DLL"
     Description="The NOBIND qualifier tells the linker not to include a bindable IAT in the final image. The default is to create the bindable IAT for delay-loaded DLLs. (/DELAY:NOBIND)"
     Category="Advanced"
     Switch="DELAY:NOBIND"
     F1Keyword="VC.Project.VCLinkerTool.SupportNobindOfDelayLoadedDLL">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="ImportLibrary"
     DisplayName="Import Library"
     Description="Overrides the default import library name. (/IMPLIB:filename)"
     Category="Advanced"
     Switch="IMPLIB"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.ImportLIbrary">
  </StringProperty>
  <StringProperty
     Name="MergeSections"
     DisplayName="Merge Sections"
     Description="The /MERGE option combines the first section (from) with the second section (to), naming the resulting section to. For example, /merge:.rdata=.text."
     Category="Advanced"
     Switch="MERGE"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.MergeSections">
  </StringProperty>
  <EnumProperty
     Name="TargetMachine"
     DisplayName="Target Machine"
     Description="The /MACHINE option specifies the target platform for the program."
     Category="Advanced"
     F1Keyword="VC.Project.VCLinkerTool.TargetMachine">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set">
    </EnumValue>
    <EnumValue
       Name="MachineARM"
       Switch="MACHINE:ARM"
       DisplayName="MachineARM">
    </EnumValue>
    <EnumValue
       Name="MachineARM64"
       Switch="MACHINE:ARM64"
       DisplayName="MachineARM64">
    </EnumValue>
    <EnumValue
       Name="MachineARM64EC"
       Switch="MACHINE:ARM64EC"
       DisplayName="MachineARM64EC">
    </EnumValue>
    <EnumValue
       Name="MachineARM64X"
       Switch="MACHINE:ARM64X"
       DisplayName="MachineARM64X">
    </EnumValue>
    <EnumValue
       Name="MachineEBC"
       Switch="MACHINE:EBC"
       DisplayName="MachineEBC">
    </EnumValue>
    <EnumValue
       Name="MachineX64"
       Switch="MACHINE:X64"
       DisplayName="MachineX64">
    </EnumValue>
    <EnumValue
       Name="MachineX86"
       Switch="MACHINE:X86"
       DisplayName="MachineX86">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="Profile"
     DisplayName="Profile"
     Description="Produces an output file that can be used with the Performance Tools profiler. Requires GenerateDebugInformation (/DEBUG) to be set. (/PROFILE)"
     Category="Advanced"
     Switch="PROFILE"
     F1Keyword="VC.Project.VCLinkerTool.Profile">
  </BoolProperty>
  <EnumProperty
     Name="CLRThreadAttribute"
     DisplayName="CLR Thread Attribute"
     Description="Explicitly specify the threading attribute for the entry point of your CLR program."
     Category="Advanced"
     F1Keyword="VC.Project.VCLinkerTool.CLRThreadAttribute">
    <EnumValue
       Name="MTAThreadingAttribute"
       Switch="CLRTHREADATTRIBUTE:MTA"
       DisplayName="MTA threading attribute"
       Description="Applies the MTAThreadAttribute attribute to the entry point of your program.">
    </EnumValue>
    <EnumValue
       Name="STAThreadingAttribute"
       Switch="CLRTHREADATTRIBUTE:STA"
       DisplayName="STA threading attribute"
       Description="Applies the STAThreadAttribute attribute to the entry point of your program.">
    </EnumValue>
    <EnumValue
       Name="DefaultThreadingAttribute"
       Switch="CLRTHREADATTRIBUTE:NONE"
       DisplayName="Default threading attribute"
       Description="Same as not specifying /CLRTHREADATTRIBUTE. Lets the Common Language Runtime (CLR) set the default threading attribute.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="CLRImageType"
     DisplayName="CLR Image Type"
     Description="Sets the type (IJW, pure, or safe) of a CLR image."
     Category="Advanced"
     F1Keyword="VC.Project.VCLinkerTool.CLRImageType">
    <EnumValue
       Name="ForceIJWImage"
       Switch="CLRIMAGETYPE:IJW"
       DisplayName="Force IJW image">
    </EnumValue>
    <EnumValue
       Name="ForcePureILImage"
       Switch="CLRIMAGETYPE:PURE"
       DisplayName="Force Pure IL Image">
    </EnumValue>
    <EnumValue
       Name="ForceSafeILImage"
       Switch="CLRIMAGETYPE:SAFE"
       DisplayName="Force Safe IL Image">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default image type">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="LinkKeyFile"
     DisplayName="Key File"
     Description="Specify key or key pair to sign an assembly. (/KEYFILE:filename)"
     Category="Advanced"
     Switch="KEYFILE"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.KeyFile">
    <StringProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </StringProperty.DataSource>
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="KeyContainer"
     DisplayName="Key Container"
     Description="Specify a key container to sign an assembly. (/KEYCONTAINER:name)"
     Category="Advanced"
     Switch="KEYCONTAINER"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.KeyContainer">
  </StringProperty>
  <BoolProperty
     ReverseSwitch="DELAYSIGN:NO"
     Name="LinkDelaySign"
     DisplayName="Delay Sign"
     Description="Partially sign an assembly. Use /DELAYSIGN if you only want to place the public key in the assembly. The default is /DELAYSIGN:NO."
     Category="Advanced"
     Switch="DELAYSIGN"
     F1Keyword="VC.Project.VCLinkerTool.DelaySign">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <EnumProperty
     Name="SignHash"
     DisplayName="CLR Sign Hash"
     Description="Specifies to Linker the algorithm for hashing the signing key. ( /CLRSIGNHASH : [ SHA1 | SHA256| SHA384| SHA512] )."
     Category="Advanced"
     Switch="CLRSIGNHASH:"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.SignHash">
    <EnumValue
       Name="SHA1"
       Switch="CLRSIGNHASH:SHA1"
       DisplayName="SHA1">
    </EnumValue>
    <EnumValue
       Name="SHA256"
       Switch="CLRSIGNHASH:SHA256"
       DisplayName="SHA256">
    </EnumValue>
    <EnumValue
       Name="SHA384"
       Switch="CLRSIGNHASH:SHA384"
       DisplayName="SHA384">
    </EnumValue>
    <EnumValue
       Name="SHA512"
       Switch="CLRSIGNHASH:SHA512"
       DisplayName="SHA512">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="CLRUNMANAGEDCODECHECK:NO"
     Name="CLRUnmanagedCodeCheck"
     DisplayName="CLR Unmanaged Code Check"
     Description="/CLRUNMANAGEDCODECHECK specifies whether the linker will apply SuppressUnmanagedCodeSecurityAttribute to linker-generated PInvoke calls from managed code into native DLLs."
     Category="Advanced"
     Switch="CLRUNMANAGEDCODECHECK"
     F1Keyword="VC.Project.VCLinkerTool.CLRUnmanagedCodeCheck">
  </BoolProperty>
  <BoolProperty
     Name="DetectOneDefinitionRule"
     DisplayName="Detect One Definition Rule violations"
     Description="Detect One Definition Rule violations for user defined types. This option requires debug information (Zi/ZI/Z7 and DEBUG)   in each module and in the program to diagnose ODR violations. (/ODR)"
     Category="Advanced"
     Switch="ODR"
     Visible="false"
     F1Keyword="VC.Project.VCLinkerTool.DetectOneDefinitionRule">
  </BoolProperty>
  <EnumProperty
     Name="LinkErrorReporting"
     DisplayName="Error Reporting"
     Description="Allows you to provide internal compiler error (ICE) information directly to the Visual C++ team."
     Category="Advanced"
     F1Keyword="VC.Project.VCLinkerTool.ErrorReporting">
    <EnumValue
       Name="PromptImmediately"
       Switch="ERRORREPORT:PROMPT"
       DisplayName="PromptImmediately"
       Description="Prompt immediately.">
    </EnumValue>
    <EnumValue
       Name="QueueForNextLogin"
       Switch="ERRORREPORT:QUEUE"
       DisplayName="Queue For Next Login"
       Description="Queue for next login.">
    </EnumValue>
    <EnumValue
       Name="SendErrorReport"
       Switch="ERRORREPORT:SEND"
       DisplayName="Send Error Report"
       Description="Send error report.">
    </EnumValue>
    <EnumValue
       Name="NoErrorReport"
       Switch="ERRORREPORT:NONE"
       DisplayName="No Error Report"
       Description="No error report.">
    </EnumValue>
  </EnumProperty>
  <IntProperty
     Name="SectionAlignment"
     DisplayName="SectionAlignment"
     Description="The /ALIGN option specifies the alignment of each section within the linear address space of the program. The number argument is in bytes and must be a power of two."
     Category="Advanced"
     Switch="ALIGN"
     Separator=":"
     F1Keyword="VC.Project.VCLinkerTool.Alignment">
  </IntProperty>
  <EnumProperty
     Name="CLRSupportLastError"
     DisplayName="Preserve Last Error Code for PInvoke Calls"
     Description="/CLRSUPPORTLASTERROR, which is on by default, preserves the last error code of functions called through the P/Invoke mechanism, which allows you to call native functions in DLLS, from code compiled with /clr."
     Category="Advanced"
     F1Keyword="VC.Project.VCLinkerTool.CLRSupportLastError">
    <EnumValue
       Name="Enabled"
       Switch="CLRSupportLastError"
       DisplayName="Enabled"
       Description="Enable CLRSupportLastError.">
    </EnumValue>
    <EnumValue
       Name="Disabled"
       Switch="CLRSupportLastError:NO"
       DisplayName="Disabled"
       Description="Disable CLRSupportLastError.">
    </EnumValue>
    <EnumValue
       Name="SystemDlls"
       Switch="CLRSupportLastError:SYSTEMDLL"
       DisplayName="System Dlls Only"
       Description="Enable CLRSupportLastError for system dlls only.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="CETCOMPAT:NO"
     Name="CETCompat"
     DisplayName="CET Shadow Stack Compatible"
     Description="Specifies whether to mark an executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack."
     Category="Advanced"
     Switch="CETCOMPAT"
     F1Keyword="VC.Project.VCLinkerTool.CETCompat">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="SAFESEH:NO"
     Name="ImageHasSafeExceptionHandlers"
     DisplayName="Image Has Safe Exception Handlers"
     Description="When /SAFESEH is specified, the linker will only produce an image if it can also produce a table of the image's safe exception handlers. This table specifies for the operating system which exception handlers are valid for the image."
     Category="Advanced"
     Switch="SAFESEH"
     F1Keyword="VC.Project.VCLinkerTool.ImageHasSafeExceptionHandlers">
  </BoolProperty>
  <BoolProperty
     Name="LinkControlFlowGuard"
     DisplayName="Control Flow Guard"
     Description="The security check helps detect additional attempts to dispatch to illegal block of code.  (/guard:cf)"
     Category="Advanced"
     Switch="guard:cf"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.LinkControlFlowGuard">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     Name="LinkGuardEHContMetadata"
     DisplayName="Enable EH Continuation Metadata"
     Description="Generates a sorted list of all the valid exception handling continuation targets for a binary, used during runtime for RIP validation. Currently available for x64 builds. (/guard:ehcont)"
     Category="Advanced"
     Switch="guard:ehcont"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.LinkGuardEHContMetadata">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="guard:nodelayloadsignret"
     Name="LinkGuardSignedReturns"
     DisplayName="Enable Signed Returns"
     Description="Enables signed returns in linker-generated delayload thunks. Currently available for ARM64 builds. (/guard:delayloadsignret; /guard:nodelayloadsignret )"
     Category="Advanced"
     Switch="guard:delayloadsignret"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.LinkGuardSignedReturns">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label=""
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <IntProperty
     Name="PdbThreads"
     Category="Advanced"
     Switch="pdbthreads:"
     Visible="false">
  </IntProperty>
  <IntProperty
     Name="CgThreads"
     Category="Advanced"
     Switch="cgthreads:"
     Visible="false">
  </IntProperty>
  <StringProperty
     Name="AdditionalOptions"
     DisplayName="Additional Options"
     Description="Additional Options."
     Category="Command Line"
     F1Keyword="vc.project.AdditionalOptionsPage">
  </StringProperty>
  <BoolProperty
     Name="LinkDLL"
     Switch="DLL"
     Visible="false">
  </BoolProperty>
  <BoolProperty
     Name="BuildingInIde"
     Visible="false">
  </BoolProperty>
</Rule>