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