<?xml version="1.0" encoding="utf-8"?> | |
<!-- | |
<copyright file="wix200x.targets" company="Outercurve Foundation"> | |
Copyright (c) 2004, Outercurve Foundation. | |
This software is released under Microsoft Reciprocal License (MS-RL). | |
The license and further copyright text can be found in the file | |
LICENSE.TXT at the root directory of the distribution. | |
</copyright> | |
--> | |
<!-- | |
<remarks> | |
WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have | |
created a backup copy. Incorrect changes to this file will make it | |
impossible to load or build your projects from the command-line or the IDE. | |
This file defines the steps in the standard build process for WiX projects (.wixproj). | |
Conventions: | |
* Targets and properties that start with an underscore (_) are considered private and should not | |
be used outside of this file. | |
Coding Conventions: | |
* Two-space indentation of nested elements | |
* Self-closing elements should have a space before the /> ("<MyProperty />") | |
* Conditions should have a space before and after the "" and between any operators. For example: | |
<MyProperty Condition=" '$(MyProperty)' == '' ">Value</MyProperty> | |
* Targets should have each attribute on a single line and indented by two spaces. Also, there | |
should be a blank line between the Target and the beginning of the contents (a blank line is | |
optional before the closing </Target> tag). | |
For example: | |
<Target | |
Name="MyTarget" | |
DependsOnTargets="$(MyTargetDependsOn)"> | |
<Message Importance="low" Text="MyTarget is doing something." /> | |
</Target> | |
</remarks> | |
--> | |
<Project | |
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" | |
DefaultTargets="Build" | |
InitialTargets="_CheckRequiredProperties; | |
_SetDefaultPathValues"> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Extension Points | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- Allow a user-customized targets files to be used as part of the build. --> | |
<PropertyGroup> | |
<UserTargetsPath>$(MSBuildProjectFullPath).user</UserTargetsPath> | |
</PropertyGroup> | |
<Import Project="$(UserTargetsPath)" Condition="Exists('$(UserTargetsPath)')" /> | |
<Import Project="$(CustomBeforeWixTargets)" Condition=" '$(CustomBeforeWixTargets)' != '' and Exists('$(CustomBeforeWixTargets)')" /> | |
<!-- These properties can be overridden to support non-default installations. --> | |
<PropertyGroup> | |
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> | |
<WixTasksPath Condition=" '$(WixTasksPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\..\WiX Toolset v3.8\bin\WixTasks.dll</WixTasksPath> | |
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> | |
<WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(MSBuildExtensionsPath)\..\WiX Toolset v3.8\bin\WixTasks.dll</WixTasksPath> | |
<LuxTargetsPath Condition=" '$(LuxTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Lux.targets</LuxTargetsPath> | |
<LuxTasksPath Condition=" '$(LuxTasksPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\..\WiX Toolset v3.8\bin\LuxTasks.dll</LuxTasksPath> | |
<LuxTargetsPath Condition=" '$(LuxTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Lux.targets</LuxTargetsPath> | |
<LuxTasksPath Condition=" '$(LuxTasksPath)' == '' ">$(MSBuildExtensionsPath)\..\WiX Toolset v3.8\bin\LuxTasks.dll</LuxTasksPath> | |
</PropertyGroup> | |
<!-- This makes the project files a dependency of all targets so that things rebuild if they change --> | |
<PropertyGroup> | |
<MSBuildAllProjects Condition="Exists('$(MSBuildProjectFullPath)')">$(MSBuildAllProjects);$(MSBuildProjectFullPath)</MSBuildAllProjects> | |
<MSBuildAllProjects Condition="Exists('$(WixTargetsPath)')">$(MSBuildAllProjects);$(WixTargetsPath)</MSBuildAllProjects> | |
<MSBuildAllProjects Condition="Exists('$(LuxTargetsPath)')">$(MSBuildAllProjects);$(LuxTargetsPath)</MSBuildAllProjects> | |
<MSBuildAllProjects Condition="Exists('$(UserTargetsPath)')">$(MSBuildAllProjects);$(UserTargetsPath)</MSBuildAllProjects> | |
<MSBuildAllProjects Condition="Exists('$(CustomBeforeWixTargets)')">$(MSBuildAllProjects);$(CustomBeforeWixTargets)</MSBuildAllProjects> | |
<MSBuildAllProjects Condition="Exists('$(CustomAfterWixTargets)')">$(MSBuildAllProjects);$(CustomAfterWixTargets)</MSBuildAllProjects> | |
</PropertyGroup> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Property Declarations | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- These tasks can be used as general-purpose build tasks. --> | |
<UsingTask TaskName="Candle" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="Insignia" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="Lit" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="Light" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="Torch" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="ReadRegistry" AssemblyFile="$(WixTasksPath)" /> | |
<!-- These tasks are extensions for harvesting WiX source code from other sources. --> | |
<UsingTask TaskName="HeatFile" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="HeatDirectory" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="HeatProject" AssemblyFile="$(WixTasksPath)" /> | |
<!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. --> | |
<UsingTask TaskName="AssignProjectConfiguration" AssemblyName="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '' or '$(MSBuildToolsVersion)' == '2.0' " /> | |
<UsingTask TaskName="AssignTargetPath" AssemblyName="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '' or '$(MSBuildToolsVersion)' == '2.0' " /> | |
<UsingTask TaskName="ResolveNonMSBuildProjectOutput" AssemblyName="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '' or '$(MSBuildToolsVersion)' == '2.0' " /> | |
<UsingTask TaskName="ResolveVCProjectOutput" AssemblyName="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '' or '$(MSBuildToolsVersion)' == '2.0' " /> | |
<UsingTask TaskName="AssignProjectConfiguration" AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '3.5' " /> | |
<UsingTask TaskName="AssignTargetPath" AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '3.5' " /> | |
<UsingTask TaskName="ResolveNonMSBuildProjectOutput" AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '3.5' " /> | |
<UsingTask TaskName="ResolveVCProjectOutput" AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition=" '$(MSBuildToolsVersion)' == '3.5' " /> | |
<UsingTask TaskName="CreateItemAvoidingInference" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="CreateProjectReferenceDefineConstants" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="WixAssignCulture" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="ResolveWixReferences" AssemblyFile="$(WixTasksPath)"/> | |
<UsingTask TaskName="ReplaceString" AssemblyFile="$(WixTasksPath)"/> | |
<UsingTask TaskName="GetCabList" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="GetLooseFileList" AssemblyFile="$(WixTasksPath)" /> | |
<UsingTask TaskName="RefreshGeneratedFile" AssemblyFile="$(WixTasksPath)"/> | |
<UsingTask TaskName="RefreshBundleGeneratedFile" AssemblyFile="$(WixTasksPath)"/> | |
<UsingTask TaskName="GenerateCompileWithObjectPath" AssemblyFile="$(WixTasksPath)"/> | |
<!-- WiX tools are 32bit EXEs, so run them out-of-proc when MSBuild is not 32bit. --> | |
<PropertyGroup> | |
<RunWixToolsOutOfProc Condition=" '$(PROCESSOR_ARCHITECTURE)'!='x86' ">true</RunWixToolsOutOfProc> | |
</PropertyGroup> | |
<!-- | |
Several properties must be set in the main project file, before using this .targets file. | |
However, if the properties are not set, we pick some defaults. | |
--> | |
<PropertyGroup> | |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |
<Platform Condition=" '$(Platform)'=='' ">AnyCPU</Platform> | |
<OutputPath Condition=" '$(OutputPath)' == '' ">bin\$(Configuration)\</OutputPath> | |
<!-- Ensure any OutputPath has a trailing slash, so it can be concatenated --> | |
<OutputPath Condition=" '$(OutputPath)' != '' and !HasTrailingSlash('$(OutputPath)') ">$(OutputPath)\</OutputPath> | |
<_OriginalOutputType>$(OutputType)</_OriginalOutputType> | |
<OutputType Condition=" '$(OutputType)' == '' ">Package</OutputType> | |
<BuildProjectReferences Condition="'$(BuildProjectReferences)' == ''">true</BuildProjectReferences> | |
</PropertyGroup> | |
<!-- Properties for the intermediate object output --> | |
<PropertyGroup> | |
<BaseIntermediateOutputPath Condition=" '$(BaseIntermediateOutputPath)' == '' ">obj\</BaseIntermediateOutputPath> | |
<IntermediateOutputPath Condition=" '$(IntermediateOutputPath)' != '' and !HasTrailingSlash('$(IntermediateOutputPath)') ">$(IntermediateOutputPath)\</IntermediateOutputPath> | |
<IntermediateOutputPath Condition=" '$(IntermediateOutputPath)' == '' and '$(Platform)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath> | |
<IntermediateOutputPath Condition=" '$(IntermediateOutputPath)' == '' and '$(Platform)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Platform)\$(Configuration)\</IntermediateOutputPath> | |
<IntermediateExt Condition=" '$(IntermediateExt)' == '' ">.wixobj</IntermediateExt> | |
<CabinetCachePath Condition=" '$(CabinetCachePath)'=='' and '$(ReuseCabinetCache)'=='true' ">$(IntermediateOutputPath)cabcache\</CabinetCachePath> | |
<CleanFile Condition=" '$(CleanFile)' == '' ">$(MSBuildProjectFile).FileList.txt</CleanFile> | |
<BindContentsFilePrefix Condition=" '$(BindContentsFilePrefix)' == '' ">$(MSBuildProjectFile).BindContentsFileList</BindContentsFilePrefix> | |
<BindContentsFileExtension Condition=" '$(BindContentsFileExtension)' == '' ">.txt</BindContentsFileExtension> | |
<BindOutputsFilePrefix Condition=" '$(BindOutputsFilePrefix)' == '' ">$(MSBuildProjectFile).BindOutputsFileList</BindOutputsFilePrefix> | |
<BindOutputsFileExtension Condition=" '$(BindOutputsFileExtension)' == '' ">.txt</BindOutputsFileExtension> | |
<BindBuiltOutputsFilePrefix Condition=" '$(BindBuiltOutputsFilePrefix)' == '' ">$(MSBuildProjectFile).BindBuiltOutputsFileList</BindBuiltOutputsFilePrefix> | |
<BindBuiltOutputsFileExtension Condition=" '$(BindBuiltOutputsFileExtension)' == '' ">.txt</BindBuiltOutputsFileExtension> | |
<SignedFile Condition=" '$(SignedFile)' == '' ">$(MSBuildProjectFile).Signed.txt</SignedFile> | |
</PropertyGroup> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
IDE Macro Property Declarations | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
IDE Macros available from both integrated builds and from command line builds. | |
The following properties are 'macros' that are available via IDE for pre and post build steps. | |
All of them should be added to WixBuildMacroCollection to ensure that they are shown in the UI. | |
--> | |
<PropertyGroup> | |
<TargetExt Condition=" '$(OutputType)' == 'Package' ">.msi</TargetExt> | |
<TargetExt Condition=" '$(OutputType)' == 'Module' ">.msm</TargetExt> | |
<TargetExt Condition=" '$(OutputType)' == 'PatchCreation' ">.pcp</TargetExt> | |
<TargetExt Condition=" '$(OutputType)' == 'Library' ">.wixlib</TargetExt> | |
<TargetExt Condition=" '$(OutputType)' == 'Bundle' ">.exe</TargetExt> | |
</PropertyGroup> | |
<PropertyGroup> | |
<!-- Example, bin\Debug\ --> | |
<OutDir Condition=" '$(OutDir)' == '' ">$(OutputPath)</OutDir> | |
<!-- Ensure OutDir has a trailing slash, so it can be concatenated --> | |
<OutDir Condition=" '$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)') ">$(OutDir)\</OutDir> | |
<!-- Default pdb output path to the output directory --> | |
<PdbOutputPath Condition=" '$(PdbOutputPath)'=='' ">$(OutDir)</PdbOutputPath> | |
<PdbOutputPath Condition=" '$(PdbOutputPath)' != '' and !HasTrailingSlash('$(PdbOutputPath)') ">$(PdbOutputPath)\</PdbOutputPath> | |
<!-- Example, MySetup --> | |
<ProjectName Condition=" '$(ProjectName)' == '' ">$(MSBuildProjectName)</ProjectName> | |
<!-- Example, MySetup.wixproj --> | |
<ProjectFileName Condition=" '$(ProjectFileName)' == '' ">$(MSBuildProjectFile)</ProjectFileName> | |
<!-- Example, .wixproj --> | |
<ProjectExt Condition=" '$(ProjectExt)' == '' ">$(MSBuildProjectExtension)</ProjectExt> | |
<!-- Example, c:\MyProjects\MySetup\ --> | |
<ProjectDir Condition=" '$(ProjectDir)' == '' ">$(MSBuildProjectDirectory)\</ProjectDir> | |
<!-- Example, c:\MyProjects\MySetup\MySetup.msi --> | |
<ProjectPath Condition=" '$(ProjectPath)' == '' ">$(ProjectDir)$(ProjectFileName)</ProjectPath> | |
<!-- Example, .wixpdb --> | |
<TargetPdbExt Condition=" '$(TargetPdbExt)' == '' ">.wixpdb</TargetPdbExt> | |
<!-- Example, MySetup --> | |
<TargetName Condition=" '$(TargetName)' == '' ">$(OutputName)</TargetName> | |
<!-- Example, MySetup.msi --> | |
<TargetFileName Condition=" '$(TargetFileName)' == '' ">$(TargetName)$(TargetExt)</TargetFileName> | |
<!-- Example, MySetup.wixpdb" --> | |
<TargetPdbName Condition=" '$(TargetPdbName)' == '' ">$(TargetName)$(TargetPdbExt)</TargetPdbName> | |
<!-- Example, Debug --> | |
<ConfigurationName Condition=" '$(ConfigurationName)' == '' ">$(Configuration)</ConfigurationName> | |
<!-- Example, AnyCPU --> | |
<PlatformName Condition=" '$(PlatformName)' == '' ">$(Platform)</PlatformName> | |
</PropertyGroup> | |
<ItemGroup> | |
<!-- Create the output path as an item so that we can use %(FullPath) on it. --> | |
<_OutputPathItem Include="$(OutDir)" /> | |
<_IntermediateOutputPathItem Include="$(IntermediateOutputPath)" /> | |
<_PdbOutputPathItem Include="$(PdbOutputPath)" /> | |
</ItemGroup> | |
<PropertyGroup> | |
<!-- Example, c:\MyProjects\MySetup\bin\debug\ --> | |
<!-- | |
Condition intentionally omitted on this one, because it causes problems | |
when we pick up the value of an environment variable named TargetDir | |
--> | |
<TargetDir>@(_OutputPathItem->'%(FullPath)')</TargetDir> | |
<TargetPdbDir>@(_PdbOutputPathItem->'%(FullPath)')</TargetPdbDir> | |
<!-- Example, C:\MyProjects\MySetup\bin\debug\MySetup.msi --> | |
<TargetPath Condition=" '$(TargetPath)' == '' ">@(_OutputPathItem->'%(FullPath)$(TargetFileName)')</TargetPath> | |
<TargetPdbPath Condition=" '$(TargetPdbPath)' == '' ">@(_PdbOutputPathItem->'%(FullPath)$(TargetPdbName)')</TargetPdbPath> | |
</PropertyGroup> | |
<!-- | |
Set the SignTargetPath item directly when output is a Bundle. The AssignCultures target | |
sets SignTargetPath item for other output types based on the cultures provided. | |
--> | |
<ItemGroup> | |
<SignTargetPath Include="$(TargetPath)" Condition=" '$(OutputType)' == 'Bundle' AND '$(SignOutput)' == 'true' AND '$(SuppressLayout)' != 'true' " /> | |
</ItemGroup> | |
<!-- | |
IDE Macros available only from integrated builds. The following properties are 'macros' that are | |
available via IDE for pre and post build steps. However, they are not defined when directly | |
building a project from the command line, only when building a solution. | |
--> | |
<PropertyGroup> | |
<DevEnvDir Condition=" '$(DevEnvDir)' == '' ">*Undefined if not building from within Visual Studio*</DevEnvDir> | |
<!-- Example, MySolution --> | |
<SolutionName Condition=" '$(SolutionName)' == '' ">*Undefined if not building a solution or within Visual Studio*</SolutionName> | |
<!-- Example, MySolution.sln --> | |
<SolutionFileName Condition=" '$(SolutionFileName)' == '' ">*Undefined if not building a solution or within Visual Studio*</SolutionFileName> | |
<!-- Example, C:\MySolutions\MySolution\MySolution.sln --> | |
<SolutionPath Condition=" '$(SolutionPath)' == '' ">*Undefined if not building a solution or within Visual Studio*</SolutionPath> | |
<!-- Example, C:\MySolutions\MySolution\ --> | |
<SolutionDir Condition=" '$(SolutionDir)' == '' ">*Undefined if not building a solution or within Visual Studio*</SolutionDir> | |
<!-- Example, .sln --> | |
<SolutionExt Condition=" '$(SolutionExt)' == '' ">*Undefined if not building a solution or within Visual Studio*</SolutionExt> | |
</PropertyGroup> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Default Harvester, Compiler, Linker, and Librarian Property Declarations | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- If WixExtension was passed in via the command line, then convert it to an ItemGroup --> | |
<ItemGroup> | |
<WixExtension Include="$(WixExtension)" Condition=" '$(WixExtension)' != '' " /> | |
</ItemGroup> | |
<!-- Default Harvester properties--> | |
<PropertyGroup> | |
<HarvestNoLogo Condition=" '$(HarvestNoLogo)' == '' ">$(NoLogo)</HarvestNoLogo> | |
<HarvestSuppressAllWarnings Condition=" '$(HarvestSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</HarvestSuppressAllWarnings> | |
<HarvestSuppressSpecificWarnings Condition=" '$(HarvestSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</HarvestSuppressSpecificWarnings> | |
<HarvestTreatWarningsAsErrors Condition=" '$(HarvestTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</HarvestTreatWarningsAsErrors> | |
<HarvestTreatSpecificWarningsAsErrors Condition=" '$(HarvestTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</HarvestTreatSpecificWarningsAsErrors> | |
<HarvestVerboseOutput Condition=" '$(HarvestVerboseOutput)' == '' ">$(VerboseOutput)</HarvestVerboseOutput> | |
<HarvestAutogenerateGuids Condition=" '$(HarvestAutogenerateGuids)' == '' ">true</HarvestAutogenerateGuids> | |
<HarvestGenerateGuidsNow Condition=" '$(HarvestGenerateGuidsNow)' == '' ">false</HarvestGenerateGuidsNow> | |
<HarvestSuppressFragments Condition=" '$(HarvestSuppressFragments)' == '' ">true</HarvestSuppressFragments> | |
<HarvestSuppressUniqueIds Condition=" '$(HarvestSuppressUniqueIds)' == '' ">false</HarvestSuppressUniqueIds> | |
</PropertyGroup> | |
<!-- Default HarvestProjects properties --> | |
<PropertyGroup> | |
<!-- Project harvesting is defaulted to off until it works more consistently. --> | |
<EnableProjectHarvesting Condition=" '$(EnableProjectHarvesting)'=='' ">false</EnableProjectHarvesting> | |
<HarvestProjectsNoLogo Condition=" '$(HarvestProjectsNoLogo)' == '' ">$(HarvestNoLogo)</HarvestProjectsNoLogo> | |
<HarvestProjectsSuppressAllWarnings Condition=" '$(HarvestProjectsSuppressAllWarnings)' == '' ">$(HarvestSuppressAllWarnings)</HarvestProjectsSuppressAllWarnings> | |
<HarvestProjectsSuppressSpecificWarnings Condition=" '$(HarvestProjectsSuppressSpecificWarnings)' == '' ">$(HarvestSuppressSpecificWarnings)</HarvestProjectsSuppressSpecificWarnings> | |
<HarvestProjectsTreatWarningsAsErrors Condition=" '$(HarvestProjectsTreatWarningsAsErrors)' == '' ">$(HarvestTreatWarningsAsErrors)</HarvestProjectsTreatWarningsAsErrors> | |
<HarvestProjectsTreatSpecificWarningsAsErrors Condition=" '$(HarvestProjectsTreatSpecificWarningsAsErrors)' == '' ">$(HarvestTreatSpecificWarningsAsErrors)</HarvestProjectsTreatSpecificWarningsAsErrors> | |
<HarvestProjectsVerboseOutput Condition=" '$(HarvestProjectsVerboseOutput)' == '' ">$(HarvestVerboseOutput)</HarvestProjectsVerboseOutput> | |
<HarvestProjectsAutogenerateGuids Condition=" '$(HarvestProjectsAutogenerateGuids)' == '' ">$(HarvestAutogenerateGuids)</HarvestProjectsAutogenerateGuids> | |
<HarvestProjectsGenerateGuidsNow Condition=" '$(HarvestProjectsGenerateGuidsNow)' == '' ">$(HarvestGenerateGuidsNow)</HarvestProjectsGenerateGuidsNow> | |
<HarvestProjectsSuppressFragments Condition=" '$(HarvestProjectsSuppressFragments)' == '' ">$(HarvestSuppressFragments)</HarvestProjectsSuppressFragments> | |
<HarvestProjectsSuppressUniqueIds Condition=" '$(HarvestProjectsSuppressUniqueIds)' == '' ">$(HarvestSuppressUniqueIds)</HarvestProjectsSuppressUniqueIds> | |
<HarvestProjectsTransforms Condition=" '$(HarvestProjectsTransforms)' == '' ">$(HarvestTransforms)</HarvestProjectsTransforms> | |
<HarvestProjectsGeneratedFile Condition=" '$(HarvestProjectsGeneratedFile)' == '' and '$(OutputType)' != 'Bundle' ">$(IntermediateOutputPath)Product.Generated.wxs</HarvestProjectsGeneratedFile> | |
<HarvestProjectsGeneratedFile Condition=" '$(HarvestProjectsGeneratedFile)' == '' and '$(OutputType)' == 'Bundle' ">$(IntermediateOutputPath)Bundle.Generated.wxs</HarvestProjectsGeneratedFile> | |
</PropertyGroup> | |
<!-- Default HarvestDirectory properties --> | |
<PropertyGroup> | |
<HarvestDirectoryNoLogo Condition=" '$(HarvestDirectoryNoLogo)' == '' ">$(HarvestNoLogo)</HarvestDirectoryNoLogo> | |
<HarvestDirectorySuppressAllWarnings Condition=" '$(HarvestDirectorySuppressAllWarnings)' == '' ">$(HarvestSuppressAllWarnings)</HarvestDirectorySuppressAllWarnings> | |
<HarvestDirectorySuppressSpecificWarnings Condition=" '$(HarvestDirectorySuppressSpecificWarnings)' == '' ">$(HarvestSuppressSpecificWarnings)</HarvestDirectorySuppressSpecificWarnings> | |
<HarvestDirectoryTreatWarningsAsErrors Condition=" '$(HarvestDirectoryTreatWarningsAsErrors)' == '' ">$(HarvestTreatWarningsAsErrors)</HarvestDirectoryTreatWarningsAsErrors> | |
<HarvestDirectoryTreatSpecificWarningsAsErrors Condition=" '$(HarvestDirectoryTreatSpecificWarningsAsErrors)' == '' ">$(HarvestTreatSpecificWarningsAsErrors)</HarvestDirectoryTreatSpecificWarningsAsErrors> | |
<HarvestDirectoryVerboseOutput Condition=" '$(HarvestDirectoryVerboseOutput)' == '' ">$(HarvestVerboseOutput)</HarvestDirectoryVerboseOutput> | |
<HarvestDirectoryAutogenerateGuids Condition=" '$(HarvestDirectoryAutogenerateGuids)' == '' ">$(HarvestAutogenerateGuids)</HarvestDirectoryAutogenerateGuids> | |
<HarvestDirectoryGenerateGuidsNow Condition=" '$(HarvestDirectoryGenerateGuidsNow)' == '' ">$(HarvestGenerateGuidsNow)</HarvestDirectoryGenerateGuidsNow> | |
<HarvestDirectorySuppressFragments Condition=" '$(HarvestDirectorySuppressFragments)' == '' ">$(HarvestSuppressFragments)</HarvestDirectorySuppressFragments> | |
<HarvestDirectorySuppressUniqueIds Condition=" '$(HarvestDirectorySuppressUniqueIds)' == '' ">$(HarvestSuppressUniqueIds)</HarvestDirectorySuppressUniqueIds> | |
<HarvestDirectoryTransforms Condition=" '$(HarvestDirectoryTransforms)' == '' ">$(HarvestTransforms)</HarvestDirectoryTransforms> | |
</PropertyGroup> | |
<!-- Default HarvestFile properties --> | |
<PropertyGroup> | |
<HarvestFileNoLogo Condition=" '$(HarvestFileNoLogo)' == '' ">$(HarvestNoLogo)</HarvestFileNoLogo> | |
<HarvestFileSuppressAllWarnings Condition=" '$(HarvestFileSuppressAllWarnings)' == '' ">$(HarvestSuppressAllWarnings)</HarvestFileSuppressAllWarnings> | |
<HarvestFileSuppressSpecificWarnings Condition=" '$(HarvestFileSuppressSpecificWarnings)' == '' ">$(HarvestSuppressSpecificWarnings)</HarvestFileSuppressSpecificWarnings> | |
<HarvestFileTreatWarningsAsErrors Condition=" '$(HarvestFileTreatWarningsAsErrors)' == '' ">$(HarvestTreatWarningsAsErrors)</HarvestFileTreatWarningsAsErrors> | |
<HarvestFileTreatSpecificWarningsAsErrors Condition=" '$(HarvestFileTreatSpecificWarningsAsErrors)' == '' ">$(HarvestTreatSpecificWarningsAsErrors)</HarvestFileTreatSpecificWarningsAsErrors> | |
<HarvestFileVerboseOutput Condition=" '$(HarvestFileVerboseOutput)' == '' ">$(HarvestVerboseOutput)</HarvestFileVerboseOutput> | |
<HarvestFileAutogenerateGuids Condition=" '$(HarvestFileAutogenerateGuids)' == '' ">$(HarvestAutogenerateGuids)</HarvestFileAutogenerateGuids> | |
<HarvestFileGenerateGuidsNow Condition=" '$(HarvestFileGenerateGuidsNow)' == '' ">$(HarvestGenerateGuidsNow)</HarvestFileGenerateGuidsNow> | |
<HarvestFileSuppressFragments Condition=" '$(HarvestFileSuppressFragments)' == '' ">$(HarvestSuppressFragments)</HarvestFileSuppressFragments> | |
<HarvestFileSuppressUniqueIds Condition=" '$(HarvestFileSuppressUniqueIds)' == '' ">$(HarvestSuppressUniqueIds)</HarvestFileSuppressUniqueIds> | |
<HarvestFileTransforms Condition=" '$(HarvestFileTransforms)' == '' ">$(HarvestTransforms)</HarvestFileTransforms> | |
</PropertyGroup> | |
<!-- Defaut Compiler properties. --> | |
<PropertyGroup> | |
<CompilerNoLogo Condition=" '$(CompilerNoLogo)' == '' ">$(NoLogo)</CompilerNoLogo> | |
<CompilerSuppressAllWarnings Condition=" '$(CompilerSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</CompilerSuppressAllWarnings> | |
<CompilerSuppressSpecificWarnings Condition=" '$(CompilerSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</CompilerSuppressSpecificWarnings> | |
<CompilerSuppressSchemaValidation Condition=" '$(CompilerSuppressSchemaValidation)' == '' ">$(SuppressSchemaValidation)</CompilerSuppressSchemaValidation> | |
<CompilerTreatWarningsAsErrors Condition=" '$(CompilerTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</CompilerTreatWarningsAsErrors> | |
<CompilerTreatSpecificWarningsAsErrors Condition=" '$(CompilerTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</CompilerTreatSpecificWarningsAsErrors> | |
<CompilerVerboseOutput Condition=" '$(CompilerVerboseOutput)' == '' ">$(VerboseOutput)</CompilerVerboseOutput> | |
<InstallerPlatform Condition=" '$(InstallerPlatform)' == '' and '$(Platform)' != 'AnyCPU' and '$(Platform)' != 'Any CPU' ">$(Platform)</InstallerPlatform> | |
</PropertyGroup> | |
<!-- Default Lib properties. --> | |
<PropertyGroup> | |
<LibNoLogo Condition=" '$(LibNoLogo)' == '' ">$(NoLogo)</LibNoLogo> | |
<LibBindFiles Condition=" '$(LibBindFiles)' == '' ">$(BindFiles)</LibBindFiles> | |
<LibPedantic Condition=" '$(LibPedantic)' == '' ">$(Pedantic)</LibPedantic> | |
<LibSuppressAllWarnings Condition=" '$(LibSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</LibSuppressAllWarnings> | |
<LibSuppressSpecificWarnings Condition=" '$(LibSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</LibSuppressSpecificWarnings> | |
<LibSuppressSchemaValidation Condition=" '$(LibSuppressSchemaValidation)' == '' ">$(SuppressSchemaValidation)</LibSuppressSchemaValidation> | |
<LibSuppressIntermediateFileVersionMatching Condition=" '$(LibSuppressIntermediateFileVersionMatching)' == '' ">$(SuppressIntermediateFileVersionMatching)</LibSuppressIntermediateFileVersionMatching> | |
<LibTreatWarningsAsErrors Condition=" '$(LibTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</LibTreatWarningsAsErrors> | |
<LibTreatSpecificWarningsAsErrors Condition=" '$(LibTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</LibTreatSpecificWarningsAsErrors> | |
<LibVerboseOutput Condition=" '$(LibVerboseOutput)' == '' ">$(VerboseOutput)</LibVerboseOutput> | |
</PropertyGroup> | |
<!-- Default Linker properties. --> | |
<PropertyGroup> | |
<LinkerNoLogo Condition=" '$(LinkerNoLogo)' == '' ">$(NoLogo)</LinkerNoLogo> | |
<LinkerBindFiles Condition=" '$(LinkerBindFiles)' == '' ">$(BindFiles)</LinkerBindFiles> | |
<LinkerPedantic Condition=" '$(LinkerPedantic)' == '' ">$(Pedantic)</LinkerPedantic> | |
<LinkerSuppressAllWarnings Condition=" '$(LinkerSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</LinkerSuppressAllWarnings> | |
<LinkerSuppressSpecificWarnings Condition=" '$(LinkerSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</LinkerSuppressSpecificWarnings> | |
<LinkerSuppressSchemaValidation Condition=" '$(LinkerSuppressSchemaValidation)' == '' ">$(SuppressSchemaValidation)</LinkerSuppressSchemaValidation> | |
<LinkerSuppressIntermediateFileVersionMatching Condition=" '$(LinkerSuppressIntermediateFileVersionMatching)' == '' ">$(SuppressIntermediateFileVersionMatching)</LinkerSuppressIntermediateFileVersionMatching> | |
<LinkerTreatWarningsAsErrors Condition=" '$(LinkerTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</LinkerTreatWarningsAsErrors> | |
<LinkerTreatSpecificWarningsAsErrors Condition=" '$(LinkerTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</LinkerTreatSpecificWarningsAsErrors> | |
<LinkerVerboseOutput Condition=" '$(LinkerVerboseOutput)' == '' ">$(VerboseOutput)</LinkerVerboseOutput> | |
</PropertyGroup> | |
<!-- If BindInputPaths (or LinkerBindInputPaths) was passed in via the command line, then convert it to an ItemGroup --> | |
<ItemGroup> | |
<BindInputPaths Include="$(BindInputPaths)" Condition=" '$(BindInputPaths)' != '' " /> | |
<LinkerBindInputPaths Include="$(LinkerBindInputPaths)" Condition=" '$(LinkerBindInputPaths)' != '' " /> | |
</ItemGroup> | |
<!-- Default Lit and Light "properties" --> | |
<ItemGroup> | |
<LinkerBindInputPaths Condition=" '@(LinkerBindInputPaths)' == '' " Include="@(BindInputPaths)" /> | |
<LinkerBindInputPaths Condition=" '@(LinkerBindInputPaths)' == '' " Include="$(LinkerBaseInputPaths)" /> | |
<LinkerBindInputPaths Condition=" '@(LinkerBindInputPaths)' == '' " Include="$(BaseInputPaths)" /> | |
</ItemGroup> | |
<!-- Default Inscribe properties. --> | |
<PropertyGroup> | |
<InscribeNoLogo Condition=" '$(InscribeNoLogo)' == '' ">$(NoLogo)</InscribeNoLogo> | |
<InscribeSuppressAllWarnings Condition=" '$(InscribeSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</InscribeSuppressAllWarnings> | |
<InscribeSuppressSpecificWarnings Condition=" '$(InscribeSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</InscribeSuppressSpecificWarnings> | |
<InscribeTreatWarningsAsErrors Condition=" '$(InscribeTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</InscribeTreatWarningsAsErrors> | |
<InscribeTreatSpecificWarningsAsErrors Condition=" '$(InscribeTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</InscribeTreatSpecificWarningsAsErrors> | |
<InscribeVerboseOutput Condition=" '$(InscribeVerboseOutput)' == '' ">$(VerboseOutput)</InscribeVerboseOutput> | |
</PropertyGroup> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Initial Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
_CheckRequiredProperties | |
Checks properties that must be set in the main project file or on the command line before | |
using this .TARGETS file. | |
[IN] | |
$(OutputName) - The name of the MSI/MSM/wixlib to build (without the extension) | |
$(OutputType) - Possible values are 'package', 'PatchCreation', 'module', 'library', 'bundle' | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<_PleaseSetThisInProjectFile>Please set this in the project file before the <Import> of the wix.targets file.</_PleaseSetThisInProjectFile> | |
<_OutputTypeDescription>The OutputType defines whether a Windows Installer package (.msi), PatchCreation (.pcp), merge module (.msm), wix library (.wixlib), or self-extracting executable (.exe) is being built. $(_PleaseSetThisInProjectFile) Possible values are 'Package', 'Module', 'Library', and 'Bundle'.</_OutputTypeDescription> | |
</PropertyGroup> | |
<Target Name="_CheckRequiredProperties"> | |
<Error | |
Code="WIXTARGETS100" | |
Condition=" '$(OutputName)' == '' " | |
Text="The OutputName property is not set in project "$(MSBuildProjectFile)". The OutputName defines the name of the output without a file extension. $(_PleaseSetThisInProjectFile)" /> | |
<Warning | |
Code="WIXTARGETS101" | |
Condition=" '$(_OriginalOutputType)' == '' " | |
Text="The OutputType property is not set in project "$(MSBuildProjectFile)". Defaulting to 'Package'. $(_OutputTypeDescription)" /> | |
<Error | |
Code="WIXTARGETS102" | |
Condition=" '$(OutputType)' != 'Package' and '$(OutputType)' != 'PatchCreation' and '$(OutputType)' != 'Module' and '$(OutputType)' != 'Library' and '$(OutputType)' != 'Bundle' " | |
Text="The OutputType property '$(OutputType)' is not valid in project "$(MSBuildProjectFile)". $(_OutputTypeDescription)" /> | |
<!-- Although we try to ensure a trailing slash, it's possible to circumvent this if the property is set on the command line --> | |
<Error | |
Code="WIXTARGETS103" | |
Condition="'$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')" | |
Text="The OutDir property must end with a trailing slash." /> | |
<Message | |
Condition=" '$(BaseInputPaths)' != '' " | |
Text="Deprecated: Use BindInputPaths instead of BaseInputPaths." /> | |
<Message | |
Condition=" '$(LinkerBaseInputPaths)' != '' " | |
Text="Deprecated: Use LinkerBindInputPaths instead of LinkerBaseInputPaths." /> | |
</Target> | |
<!-- | |
================================================================================================== | |
_SetDefaultPathValues | |
Gets the default values of some paths from the registry. | |
[OUT] | |
$(WixExtDir) - Default Wix Extension Directory | |
$(WixToolPath) - Default Wix Tool install folder | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<WixInstallRegKey>SOFTWARE\Microsoft\Windows Installer XML\3.8</WixInstallRegKey> | |
<WixInstallRegKeyWow64>SOFTWARE\Wow6432Node\Microsoft\Windows Installer XML\3.8</WixInstallRegKeyWow64> | |
</PropertyGroup> | |
<Target | |
Name="_SetDefaultPathValues"> | |
<ReadRegistry | |
Hive="LocalMachine" | |
Key="$(WixInstallRegKey)" | |
Name="InstallRoot" | |
FailIfMissing="false" | |
Condition=" '$(WixExtDir)' == '' "> | |
<Output TaskParameter="Value" PropertyName="WixExtDir" /> | |
</ReadRegistry> | |
<ReadRegistry | |
Hive="LocalMachine" | |
Key="$(WixInstallRegKey)" | |
Name="InstallRoot" | |
FailIfMissing="false" | |
Condition=" '$(WixToolPath)' == '' "> | |
<Output TaskParameter="Value" PropertyName="WixToolPath" /> | |
</ReadRegistry> | |
<ReadRegistry | |
Hive="LocalMachine" | |
Key="$(WixInstallRegKeyWow64)" | |
Name="InstallRoot" | |
FailIfMissing="false" | |
Condition=" '$(WixExtDir)' == '' "> | |
<Output TaskParameter="Value" PropertyName="WixExtDir" /> | |
</ReadRegistry> | |
<ReadRegistry | |
Hive="LocalMachine" | |
Key="$(WixInstallRegKeyWow64)" | |
Name="InstallRoot" | |
FailIfMissing="false" | |
Condition=" '$(WixToolPath)' == '' "> | |
<Output TaskParameter="Value" PropertyName="WixToolPath" /> | |
</ReadRegistry> | |
<CreateProperty Value="$(WixToolPath)" Condition=" '$(WixExtDir)' == '' "> | |
<Output TaskParameter="Value" PropertyName="WixExtDir" /> | |
</CreateProperty> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Build Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
Build | |
The main build entry point. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<BuildDependsOn> | |
BeforeBuild; | |
CoreBuild; | |
AfterBuild | |
</BuildDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Build" | |
DependsOnTargets="$(BuildDependsOn)" | |
Outputs="$(TargetPath)"> | |
</Target> | |
<!-- | |
================================================================================================== | |
BeforeBuild | |
Redefine this target in your project in order to run tasks just before Build. | |
================================================================================================== | |
--> | |
<Target Name="BeforeBuild" /> | |
<!-- | |
================================================================================================== | |
AfterBuild | |
Redefine this target in your project in order to run tasks just after Build. | |
================================================================================================== | |
--> | |
<Target Name="AfterBuild" /> | |
<!-- | |
================================================================================================== | |
CoreBuild | |
The core build step calls each of the build targets. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<CoreBuildDependsOn> | |
BuildOnlySettings; | |
PrepareForBuild; | |
PreBuildEvent; | |
ResolveReferences; | |
AddCompilerDefineConstants; | |
CompileAndLink; | |
Signing; | |
GetTargetPath; | |
IncrementalClean; | |
PostBuildEvent | |
</CoreBuildDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="CoreBuild" | |
DependsOnTargets="$(CoreBuildDependsOn)"> | |
<OnError | |
ExecuteTargets="_TimeStampAfterCompileAndLink;PostBuildEvent" | |
Condition=" '$(RunPostBuildEvent)' == 'Always' or '$(RunPostBuildEvent)' == 'OnOutputUpdated' " /> | |
<OnError ExecuteTargets="_CleanRecordFileWrites" /> | |
</Target> | |
<!-- | |
================================================================================================== | |
Rebuild | |
Delete all intermediate and final build outputs, and then build the project from scratch. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<RebuildDependsOn> | |
BeforeRebuild; | |
Clean; | |
$(MSBuildProjectDefaultTargets); | |
AfterRebuild; | |
</RebuildDependsOn> | |
<RebuildDependsOn Condition=" '$(MSBuildProjectDefaultTargets)' == 'Rebuild' "> | |
BeforeRebuild; | |
Clean; | |
Build; | |
AfterRebuild; | |
</RebuildDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Rebuild" | |
DependsOnTargets="$(RebuildDependsOn)" | |
Outputs="$(TargetPath)" /> | |
<!-- | |
================================================================================================== | |
BeforeRebuild | |
Redefine this target in your project in order to run tasks just before Rebuild. | |
================================================================================================== | |
--> | |
<Target Name="BeforeRebuild" /> | |
<!-- | |
================================================================================================== | |
AfterRebuild | |
Redefine this target in your project in order to run tasks just after Rebuild. | |
================================================================================================== | |
--> | |
<Target Name="AfterRebuild" /> | |
<!-- | |
================================================================================================== | |
BuildOnlySettings | |
This target is called only when doing a real build. It is not called during project load. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<BuildingProject>false</BuildingProject> | |
</PropertyGroup> | |
<Target Name="BuildOnlySettings"> | |
<CreateProperty Value="true"> | |
<Output TaskParameter="Value" PropertyName="BuildingProject" /> | |
</CreateProperty> | |
</Target> | |
<!-- | |
================================================================================================== | |
PrepareForBuild | |
Prepare the prerequisites for building. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<PrepareForBuildDependsOn></PrepareForBuildDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="PrepareForBuild" DependsOnTargets="$(PrepareForBuildDependsOn)"> | |
<!-- | |
These CreateProperty calls are required because TargetDir and TargetPath are defined | |
to contain an item list. We want that item list to be expanded so that it can be used | |
as a regular property value and not as an item-list-with-transform. | |
--> | |
<CreateProperty Value="$(TargetDir)"> | |
<Output TaskParameter="Value" PropertyName="TargetDir" /> | |
</CreateProperty> | |
<CreateProperty Value="$(TargetPath)"> | |
<Output TaskParameter="Value" PropertyName="TargetPath" /> | |
</CreateProperty> | |
<CreateProperty Value="$(TargetPdbDir)"> | |
<Output TaskParameter="Value" PropertyName="TargetPdbDir" /> | |
</CreateProperty> | |
<!-- Create the directories for intermediate and final build products. --> | |
<MakeDir Directories="$(IntermediateOutputPath);$(OutDir)" /> | |
</Target> | |
<!-- | |
================================================================================================== | |
ResolveWixExtensionReferences | |
Resolves WiX extension references to full paths. Any properties you use | |
to resolve paths to extensions must be defined before importing this | |
file or the extensions will be automatically resolved to $(WixExtDir). | |
[IN] | |
@(WixExtension) - WixExtension item group | |
[OUT] | |
@(_ResolvedWixExtensionPaths) - Item group with full paths to extensions | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<ResolveWixExtensionReferencesDependsOn> | |
PrepareForBuild | |
</ResolveWixExtensionReferencesDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="ResolveWixExtensionReferences" | |
DependsOnTargets="$(ResolveWixExtensionReferencesDependsOn)" | |
Condition=" '@(WixExtension)' != ''"> | |
<!-- | |
The WixExtensionSearchPaths property is set to find assemblies in the following order: | |
(1) $(ReferencePaths) - the reference paths property, which comes from the .USER file. | |
(2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}. | |
(3) Treat the reference's Include as if it were a real file name. | |
(4) Path specified by the WixExtDir property. | |
--> | |
<CreateProperty Condition=" '$(WixExtensionSearchPaths)' == '' " Value=" | |
$(ReferencePaths); | |
{HintPathFromItem}; | |
{RawFileName}; | |
$(WixExtDir) | |
"> | |
<Output TaskParameter="Value" PropertyName="WixExtensionSearchPaths" /> | |
</CreateProperty> | |
<ResolveWixReferences | |
WixReferences="@(WixExtension)" | |
SearchPaths="$(WixExtensionSearchPaths)" | |
SearchFilenameExtensions=".dll"> | |
<Output TaskParameter="ResolvedWixReferences" ItemName="_AllResolvedWixExtensionPaths" /> | |
</ResolveWixReferences> | |
<!-- Remove duplicate extension items that would cause build errors --> | |
<RemoveDuplicates Inputs="@(_AllResolvedWixExtensionPaths)"> | |
<Output TaskParameter="Filtered" ItemName="_ResolvedWixExtensionPaths" /> | |
</RemoveDuplicates> | |
</Target> | |
<!-- | |
================================================================================================== | |
PreBuildEvent | |
Run the pre-build event if there is one. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<PreBuildEventDependsOn>GetTargetPath</PreBuildEventDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="PreBuildEvent" | |
DependsOnTargets="$(PreBuildEventDependsOn)" | |
Condition=" '$(PreBuildEvent)' != '' "> | |
<ReplaceString | |
Text="$(PreBuildEvent)" | |
OldValue="!(TargetPath)" | |
NewValue="$(TargetPath)"> | |
<Output TaskParameter="Text" PropertyName="ExpandedPreBuildEvent" /> | |
</ReplaceString> | |
<ReplaceString | |
Text="$(ExpandedPreBuildEvent)" | |
OldValue="!(TargetPdbPath)" | |
NewValue="$(TargetPdbPath)"> | |
<Output TaskParameter="Text" PropertyName="ExpandedPreBuildEvent" /> | |
</ReplaceString> | |
<Exec WorkingDirectory="$(OutDir)" Command="$(ExpandedPreBuildEvent)" /> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Resolve References Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
ResolveReferences | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<ResolveReferencesDependsOn> | |
BeforeResolveReferences; | |
SplitProjectReferencesByType; | |
ResolveProjectReferences; | |
ResolveVCProjectReferences; | |
ResolveWixLibraryReferences; | |
ResolveWixExtensionReferences; | |
AfterResolveReferences | |
</ResolveReferencesDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="ResolveReferences" | |
DependsOnTargets="$(ResolveReferencesDependsOn)" /> | |
<!-- | |
================================================================================================== | |
BeforeResolveReferences | |
Redefine this target in your project in order to run tasks just before ResolveReferences. | |
================================================================================================== | |
--> | |
<Target Name="BeforeResolveReferences" /> | |
<!-- | |
================================================================================================== | |
AfterResolveReferences | |
Redefine this target in your project in order to run tasks just after ResolveReferences. | |
================================================================================================== | |
--> | |
<Target Name="AfterResolveReferences" /> | |
<!-- | |
================================================================================================== | |
SplitProjectReferencesByType | |
Split project references into two lists: VC project references and all others (handled by the | |
MSBuild engine) | |
[IN] | |
@(ProjectReference) - the list of all project references | |
[OUT] | |
@(VCProjectReference) - the list of VC (managed VC++ to be exact) project references | |
@(NonVCProjectReference) - the list of non-VC project references (MSBuild and potentially VSIP projects) | |
================================================================================================== | |
--> | |
<Target | |
Name="SplitProjectReferencesByType" | |
Condition=" '@(ProjectReference)' != '' "> | |
<!-- Assign a project configuration to each project reference if we're building a solution file. --> | |
<AssignProjectConfiguration | |
ProjectReferences="@(ProjectReference)" | |
SolutionConfigurationContents="$(CurrentSolutionConfigurationContents)" | |
Condition=" '$(BuildingSolutionFile)' == 'true' "> | |
<Output TaskParameter="AssignedProjects" ItemName="_ProjectReferenceWithConfiguration" /> | |
</AssignProjectConfiguration> | |
<!-- | |
Otherwise (regular command line build or building inside the IDE) just copy the references | |
as we don't need their configurations. | |
--> | |
<CreateItem Include="@(ProjectReference)" Condition=" '$(BuildingSolutionFile)' != 'true' "> | |
<Output TaskParameter="Include" ItemName="_ProjectReferenceWithConfiguration" /> | |
</CreateItem> | |
<!-- Copy all VC project references to the VCProjectReference item list (using the VC project extension) --> | |
<CreateItem | |
Include="@(_ProjectReferenceWithConfiguration)" | |
Condition=" '%(Extension)' == '.vcproj' " | |
AdditionalMetadata="MSBuildSourceProjectFileFullPath=%(FullPath)"> | |
<Output TaskParameter="Include" ItemName="VCProjectReference" /> | |
</CreateItem> | |
<!-- Copy the rest of the project references to the NonVCProjectReference item list --> | |
<CreateItem | |
Include="@(_ProjectReferenceWithConfiguration)" | |
Condition=" '%(Extension)' != '.vcproj' " | |
AdditionalMetadata="MSBuildSourceProjectFileFullPath=%(FullPath)"> | |
<Output TaskParameter="Include" ItemName="NonVCProjectReference" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
_SplitProjectReferencesByFileExistence | |
Split referenced projects into two lists: those that exist on disk and those that don't. | |
[IN] | |
@(NonVCProjectReference) - the list of non-VC project references (MSBuild and potentially VSIP projects) | |
[OUT] | |
@(_MSBuildProjectReferenceExistent) - the list of non-VC project references that exist on disk | |
@(_MSBuildProjectReferenceNonexistent) - the list of non-VC project references that don't exist on disk | |
================================================================================================== | |
--> | |
<Target | |
Name="_SplitProjectReferencesByFileExistence" | |
DependsOnTargets="SplitProjectReferencesByType" | |
Condition=" '@(NonVCProjectReference)' != '' "> | |
<!-- | |
Use this task for matching projects with pre-resolved project outputs set by the IDE if building | |
inside the IDE. The IDE only includes non-MSBuild projects in the output list. We'll use MSBuild | |
to resolve MSBuild projects. This task will resolve VSIP (3rd party) project references and | |
create a new item list with only project references to projects in the MSBuild format. | |
--> | |
<ResolveNonMSBuildProjectOutput | |
ProjectReferences="@(NonVCProjectReference)" | |
PreresolvedProjectOutputs="$(VSIDEResolvedNonMSBuildProjectOutputs)" | |
Condition=" '$(BuildingInsideVisualStudio)' == 'true' "> | |
<Output TaskParameter="ResolvedOutputPaths" ItemName="_ResolvedProjectReferencePaths" /> | |
<Output TaskParameter="UnresolvedProjectReferences" ItemName="_MSBuildProjectReference" /> | |
</ResolveNonMSBuildProjectOutput> | |
<!-- | |
If building from the command line, simply copy the NonVCProjectReference item list to | |
_MSBuildProjectReference, since we have to assume all non-VC projects are in the MSBuild format. | |
We have no way of building VSIP (3rd party) projects from the command line. | |
--> | |
<CreateItem Include="@(NonVCProjectReference)" Condition=" '$(BuildingInsideVisualStudio)' != 'true' "> | |
<Output TaskParameter="Include" ItemName="_MSBuildProjectReference" /> | |
</CreateItem> | |
<!-- Break the project list into two lists: those that exist on disk and those that don't. --> | |
<CreateItem Include="@(_MSBuildProjectReference)" Condition="Exists('%(Identity)')"> | |
<Output TaskParameter="Include" ItemName="_MSBuildProjectReferenceExistent" /> | |
</CreateItem> | |
<CreateItem Include="@(_MSBuildProjectReference)" Condition="!Exists('%(Identity)')"> | |
<Output TaskParameter="Include" ItemName="_MSBuildProjectReferenceNonexistent" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
ResolveProjectReferences | |
Builds all of the referenced projects to get their outputs. | |
[IN] | |
@(NonVCProjectReference) - The list of non-VC project references. | |
[OUT] | |
@(_ResolvedProjectReferencePaths) - Paths to referenced projects. | |
@(WixLibProjects) - Paths to any .wixlibs that were built by referenced projects. | |
================================================================================================ | |
--> | |
<Target | |
Name="ResolveProjectReferences" | |
DependsOnTargets="_SplitProjectReferencesByFileExistence" | |
Condition=" '@(NonVCProjectReference)' != '' "> | |
<!-- Issue a warning for each non-existent project. --> | |
<Warning | |
Text="The referenced project '%(_MSBuildProjectReferenceNonexistent.Identity)' does not exist." | |
Condition=" '@(_MSBuildProjectReferenceNonexistent)' != '' " /> | |
<!-- | |
When building this project from the IDE or when building a .sln from the command line or | |
when only building .wixlib project references, gather the referenced build outputs. The | |
code that builds the .sln will already have built the project, so there's no need to do | |
it again here and when building only .wixlib project references we'll use the results to | |
determine which projects to build. | |
The ContinueOnError setting is here so that, during project load, as much information as | |
possible will be passed to the compilers. | |
--> | |
<MSBuild | |
Projects="@(_MSBuildProjectReferenceExistent)" | |
Targets="%(_MSBuildProjectReferenceExistent.Targets);GetTargetPath" | |
Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);%(_MSBuildProjectReferenceExistent.SetPlatform)" | |
Condition="('$(BuildingSolutionFile)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true' or '$(BuildProjectReferences)' != 'true') and '@(_MSBuildProjectReferenceExistent)' != '' " | |
ContinueOnError="!$(BuildingProject)"> | |
<Output TaskParameter="TargetOutputs" ItemName="_GatheredProjectReferencePaths" /> | |
</MSBuild> | |
<!-- | |
Determine which project references should be built. Note: we will not build any project references | |
if building in the IDE or building a .sln file because those build project references directly. | |
If BuildProjectReferences is 'true' (the default) then take all MSBuild project references that exist | |
on disk and add them to the list of things to build. This is the easy case. | |
--> | |
<CreateItem | |
Include="@(_MSBuildProjectReferenceExistent)" | |
Condition=" '$(BuildProjectReferences)' == 'true' and ('$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true') "> | |
<Output TaskParameter="Include" ItemName="_ProjectReferencesToBuild" /> | |
</CreateItem> | |
<!-- | |
If BuildProjectReferences is 'wixlib' then build only the MSBuild project references that exist and | |
create a .wixlib file. That requires us to first filter the gathered project references down to only | |
those that build .wixlibs. | |
Note that this functionality is broken in MSBuild v3.5 due to MSBuildSourceProjectFile metadata | |
being relative paths in v3.5 (versus full paths in v4.0). | |
--> | |
<CreateItem | |
Include="@(_GatheredProjectReferencePaths)" | |
Condition=" '$(BuildProjectReferences)' == 'wixlib' and '%(Extension)' == '.wixlib' and ('$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true') "> | |
<Output TaskParameter="Include" ItemName="_ReferencedWixLibPaths" /> | |
</CreateItem> | |
<!-- | |
The second step when building only 'wixlib' project references is to create the list of existing MSBuild | |
project references that do *not* build a .wixlib. These are the projects that will be skipped. | |
--> | |
<CreateItem | |
Include="@(_MSBuildProjectReferenceExistent->'%(FullPath)')" | |
Exclude="@(_ReferencedWixLibPaths->'%(MSBuildSourceProjectFile)')" | |
Condition=" '$(BuildProjectReferences)' == 'wixlib' and ('$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true') "> | |
<Output TaskParameter="Include" ItemName="_ProjectReferencesToSkip" /> | |
</CreateItem> | |
<!-- | |
Finally, when building only 'wixlib' project references, the list of projects to build are naturally the | |
list of projects *not* being skipped. | |
--> | |
<CreateItem | |
Include="@(_MSBuildProjectReferenceExistent->'%(FullPath)')" | |
Exclude="@(_ProjectReferencesToSkip)" | |
Condition=" '$(BuildProjectReferences)' == 'wixlib' and ('$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true') "> | |
<Output TaskParameter="Include" ItemName="_ProjectReferencesToBuild" /> | |
</CreateItem> | |
<!-- Display a warning for all projects being skipped. --> | |
<Warning | |
Text="BuildProjectReferences set to '$(BuildProjectReferences)'. Skipping the non-Library project: %(_ProjectReferencesToSkip.Identity)" | |
Condition=" '@(_ProjectReferencesToSkip)' != '' " /> | |
<Message | |
Importance="low" | |
Text="Project reference to build: %(_ProjectReferencesToBuild.Identity), properties: %(_ProjectReferencesToBuild.Properties)" | |
Condition=" '@(_ProjectReferencesToBuild)' != '' " /> | |
<!-- | |
Build referenced projects when building from the command line. | |
The $(ProjectReferenceBuildTargets) will normally be blank so that the project's default target | |
is used during a P2P reference. However if a custom build process requires that the referenced | |
project has a different target to build it can be specified. | |
--> | |
<MSBuild | |
Projects="@(_ProjectReferencesToBuild)" | |
Targets="$(ProjectReferenceBuildTargets)" | |
Properties="%(_ProjectReferencesToBuild.SetConfiguration);%(_ProjectReferencesToBuild.SetPlatform)" | |
Condition=" '@(_ProjectReferencesToBuild)' != '' "> | |
<Output TaskParameter="TargetOutputs" ItemName="_BuiltProjectReferencePaths" /> | |
</MSBuild> | |
<!-- Assign the unique gathered and built project references to the resolved project | |
reference paths. --> | |
<RemoveDuplicates Inputs="@(_GatheredProjectReferencePaths);@(_BuiltProjectReferencePaths)"> | |
<Output TaskParameter="Filtered" ItemName="_ResolvedProjectReferencePaths" /> | |
<Output TaskParameter="Filtered" ItemName="_MSBuildResolvedProjectReferencePaths" /> | |
</RemoveDuplicates> | |
<!-- Create list of all .wixlib project references. --> | |
<CreateItem | |
Include="@(_ResolvedProjectReferencePaths)" | |
Condition=" '%(Extension)' == '.wixlib' "> | |
<Output TaskParameter="Include" ItemName="WixLibProjects" /> | |
</CreateItem> | |
<Message | |
Importance="low" | |
Text="Library from referenced projects: %(WixLibProjects.Identity)" | |
Condition=" '@(WixLibProjects)' != '' " /> | |
</Target> | |
<!-- | |
================================================================================================ | |
GetTargetPath | |
This stand-alone target returns the name of the build product (i.e. MSI, MSM) that would be | |
produced if we built this project. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<GetTargetPathDependsOn> | |
PrepareForBuild; | |
AssignCultures | |
</GetTargetPathDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="GetTargetPath" | |
DependsOnTargets="$(GetTargetPathDependsOn)" | |
Outputs="$(TargetPath)" /> | |
<!-- | |
================================================================================================ | |
ResolveVCProjectReferences | |
Find outputs of referenced VC projects (currently we never build VC projects ourselves). | |
[IN] | |
@(VCProjectReference) - the list of VC project references | |
[OUT] | |
@(_ResolvedProjectReferencePaths) - paths to projects' outputs | |
================================================================================================ | |
--> | |
<Target | |
Name="ResolveVCProjectReferences" | |
Condition=" '@(VCProjectReference)' != '' " | |
DependsOnTargets="SplitProjectReferencesByType"> | |
<!-- | |
Use the task for matching projects with pre-resolved project outputs set by the IDE | |
if building inside the IDE. | |
--> | |
<ResolveNonMSBuildProjectOutput | |
ProjectReferences="@(VCProjectReference)" | |
PreresolvedProjectOutputs="$(VSIDEResolvedNonMSBuildProjectOutputs)" | |
Condition=" '$(BuildingInsideVisualStudio)' == 'true' "> | |
<Output TaskParameter="ResolvedOutputPaths" ItemName="_ResolvedVCProjectReferencePaths" /> | |
</ResolveNonMSBuildProjectOutput> | |
<!-- | |
Use the task that uses VC project engine if building from the command line. Invoking this | |
task only makes sense for building solution files, otherwise we won't have the necessary | |
configuration information. | |
--> | |
<ResolveVCProjectOutput | |
ProjectReferences="@(VCProjectReference)" | |
Configuration="%(VCProjectReference.FullConfiguration)" | |
SolutionFile="$(SolutionPath)" | |
Override="$(VCBuildOverride)" | |
Condition=" '$(BuildingSolutionFile)' == 'true' "> | |
<Output TaskParameter="ResolvedOutputPaths" ItemName="_ResolvedVCProjectReferencePaths" /> | |
</ResolveVCProjectOutput> | |
<Error | |
Code="WIXTARGETS104" | |
Text="MSBuild cannot resolve the reference to the Visual C++ project '%(VCProjectReference.Identity)' when building a stand-alone MSBuild project. To correctly resolve this reference, please build the solution file containing these projects." | |
Condition=" '$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true' " /> | |
<CreateItem Include="@(_ResolvedVCProjectReferencePaths)"> | |
<Output TaskParameter="Include" ItemName="_ResolvedProjectReferencePaths" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
ResolveWixLibraryReferences | |
Resolve the library references to full paths. | |
[IN] | |
@(WixLibrary) - The list of .wixlib files. | |
[OUT] | |
@(_ResolvedWixLibraryPaths) - Item group with full paths to libraries | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<ResolveWixLibraryReferencesDependsOn> | |
PrepareForBuild; | |
</ResolveWixLibraryReferencesDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="ResolveWixLibraryReferences" | |
DependsOnTargets="$(ResolveWixLibraryReferencesDependsOn)" | |
Condition=" '@(WixLibrary)' != ''"> | |
<!-- | |
The WixLibrarySearchPaths property is set to find assemblies in the following order: | |
(1) $(ReferencePaths) - the reference paths property, which comes from the .USER file. | |
(2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}. | |
(3) Treat the reference's Include as if it were a real file name. | |
(4) Path specified by the WixExtDir property. | |
--> | |
<CreateProperty Condition=" '$(WixLibrarySearchPaths)' == '' " Value=" | |
$(ReferencePaths); | |
{HintPathFromItem}; | |
{RawFileName}; | |
$(WixExtDir) | |
"> | |
<Output TaskParameter="Value" PropertyName="WixLibrarySearchPaths" /> | |
</CreateProperty> | |
<ResolveWixReferences | |
WixReferences="@(WixLibrary)" | |
SearchPaths="$(WixLibrarySearchPaths)" | |
SearchFilenameExtensions=".wixlib"> | |
<Output TaskParameter="ResolvedWixReferences" ItemName="_AllResolvedWixLibraryPaths" /> | |
</ResolveWixReferences> | |
<!-- Remove duplicate library items that would cause build errors --> | |
<RemoveDuplicates Inputs="@(_AllResolvedWixLibraryPaths)"> | |
<Output TaskParameter="Filtered" ItemName="_ResolvedWixLibraryPaths" /> | |
</RemoveDuplicates> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Compiler Define Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
AddCompilerDefineConstants | |
Adds solution and project references to the constants passed into the compiler. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<AddCompilerDefineConstantsDependsOn> | |
ResolveReferences; | |
AddSolutionDefineConstants; | |
AddProjectReferenceDefineConstants; | |
</AddCompilerDefineConstantsDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="AddCompilerDefineConstants" | |
DependsOnTargets="$(AddCompilerDefineConstantsDependsOn)"> | |
<CreateProperty Value=" | |
Configuration=$(ConfigurationName); | |
OutDir=$(OutDir); | |
Platform=$(PlatformName); | |
ProjectDir=$(ProjectDir); | |
ProjectExt=$(ProjectExt); | |
ProjectFileName=$(ProjectFileName); | |
ProjectName=$(ProjectName); | |
ProjectPath=$(ProjectPath); | |
TargetDir=$(TargetDir); | |
TargetExt=$(TargetExt); | |
TargetFileName=$(TargetFileName); | |
TargetName=$(TargetName); | |
TargetPath=$(TargetPath); | |
"> | |
<Output TaskParameter="Value" PropertyName="ProjectDefineConstants" /> | |
</CreateProperty> | |
</Target> | |
<!-- | |
================================================================================================== | |
AddSolutionDefineConstants | |
Adds solution references to the constants passed into the compiler, but only when building | |
from the Visual Studio IDE or when building a solution file via the command line. | |
[OUT] | |
$(SolutionDefineConstants) - the list of solution variables to be passed into the compiler | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<DefineSolutionProperties Condition=" '$(DefineSolutionProperties)' == '' ">true</DefineSolutionProperties> | |
</PropertyGroup> | |
<Target | |
Name="AddSolutionDefineConstants" | |
Condition=" '$(DefineSolutionProperties)' == 'true' "> | |
<Warning | |
Text="Solution properties are only available during IDE builds or when building the solution file from the command line. To turn off this warning set <DefineSolutionProperties>false</DefineSolutionProperties> in your .wixproj file." | |
Condition=" '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildingSolutionFile)' != 'true' " /> | |
<CreateProperty Value="$(SolutionDefineConstants);DevEnvDir=$(DevEnvDir)" Condition=" '$(DevEnvDir)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
<CreateProperty Value="$(SolutionDefineConstants);SolutionDir=$(SolutionDir)" Condition=" '$(SolutionDir)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
<CreateProperty Value="$(SolutionDefineConstants);SolutionExt=$(SolutionExt)" Condition=" '$(SolutionExt)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
<CreateProperty Value="$(SolutionDefineConstants);SolutionFileName=$(SolutionFileName)" Condition=" '$(SolutionFileName)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
<CreateProperty Value="$(SolutionDefineConstants);SolutionName=$(SolutionName)" Condition=" '$(SolutionName)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
<CreateProperty Value="$(SolutionDefineConstants);SolutionPath=$(SolutionPath)" Condition=" '$(SolutionPath)' != '' "> | |
<Output TaskParameter="Value" PropertyName="SolutionDefineConstants" /> | |
</CreateProperty> | |
</Target> | |
<!-- | |
================================================================================================== | |
AddProjectReferenceDefineConstants | |
Adds project references to the constants passed into the compiler. | |
[IN] | |
@(_ResolvedProjectReferencePaths) - paths to projects' outputs | |
$(VSProjectConfigurations) - map of project names to configurations, provided by VS when building in the IDE | |
[OUT] | |
$(ProjectReferenceDefineConstants) - the list of referenced project variables to be passed into the compiler | |
================================================================================================== | |
--> | |
<Target | |
Name="AddProjectReferenceDefineConstants" | |
Condition=" '@(_ResolvedProjectReferencePaths)' != '' "> | |
<CreateProjectReferenceDefineConstants | |
ProjectReferencePaths="@(_ResolvedProjectReferencePaths)" | |
ProjectConfigurations="$(VSProjectConfigurations)"> | |
<Output TaskParameter="DefineConstants" PropertyName="ProjectReferenceDefineConstants" /> | |
</CreateProjectReferenceDefineConstants> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
CompileAndLink Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
CompileAndLink | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<CompileAndLinkDependsOn> | |
ResolveReferences; | |
BeforeCompileAndLink; | |
_TimeStampBeforeCompileAndLink; | |
ConvertReferences; | |
ConvertBundleReferences; | |
Harvest; | |
GenerateCode; | |
Compile; | |
Lib; | |
Link; | |
UpdateLinkFileWrites; | |
_TimeStampAfterCompileAndLink; | |
AfterCompileAndLink | |
</CompileAndLinkDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="CompileAndLink" | |
DependsOnTargets="$(CompileAndLinkDependsOn)" /> | |
<!-- | |
================================================================================================== | |
BeforeCompileAndLink | |
Redefine this target in your project in order to run tasks just before CompileAndLink. | |
================================================================================================== | |
--> | |
<Target Name="BeforeCompileAndLink" /> | |
<!-- | |
================================================================================================== | |
AfterCompileAndLink | |
Redefine this target in your project in order to run tasks just after CompileAndLink. | |
================================================================================================== | |
--> | |
<Target Name="AfterCompileAndLink" /> | |
<!-- | |
================================================================================================== | |
_TimeStampBeforeCompileAndLink | |
Record a timestamp so that we can compare it to a new timestamp during PostBuildEvent if | |
necessary. | |
================================================================================================== | |
--> | |
<Target | |
Name="_TimeStampBeforeCompileAndLink" > | |
<CreateItem Include="$(TargetPath)"> | |
<Output TaskParameter="Include" ItemName="TargetOutput" /> | |
</CreateItem> | |
<CreateItem Include="%(TargetOutput.ModifiedTime)"> | |
<Output TaskParameter="Include" PropertyName="_TargetOutputTimestampBeforeCompileAndLink" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
_TimeStampAfterCompileAndLink | |
Take before and after timestamps so that we can compare them (used by post-build events that | |
are set to fire "OnOutputUpdated"). | |
================================================================================================== | |
--> | |
<Target | |
Name="_TimeStampAfterCompileAndLink"> | |
<CreateItem Include="%(TargetOutput.ModifiedTime)"> | |
<Output TaskParameter="Include" PropertyName="_TargetOutputTimestampAfterCompileAndLink" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
Harvest | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<HarvestDependsOn> | |
HarvestProjects; | |
HarvestDirectory; | |
HarvestFile; | |
</HarvestDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Harvest" | |
DependsOnTargets="$(HarvestDependsOn)" /> | |
<!-- | |
================================================================================================== | |
GenerateCode | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<GenerateCodeDependsOn> | |
RefreshGeneratedFile; | |
RefreshBundleGeneratedFile | |
</GenerateCodeDependsOn> | |
</PropertyGroup> | |
<Target Name="GenerateCode" | |
DependsOnTargets="$(GenerateCodeDependsOn)" /> | |
<!-- | |
================================================================================================== | |
Signing | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<InternalSignDependsOn Condition=" '$(OutputType)' == 'Module' "> | |
GetMsmsToSign; | |
InternalSignMsm; | |
</InternalSignDependsOn> | |
<InternalSignDependsOn Condition=" '$(OutputType)' == 'Package' "> | |
GetCabsToSign; | |
GetMsiToSign; | |
InternalSignCabs; | |
InscribeMsi; | |
InternalSignMsi; | |
</InternalSignDependsOn> | |
<InternalSignDependsOn Condition=" '$(OutputType)' == 'Bundle' "> | |
GetContainersToSign; | |
InternalSignContainers; | |
InscribeBundleEngine; | |
InternalSignBundleEngine; | |
InscribeBundle; | |
InternalSignBundle; | |
</InternalSignDependsOn> | |
<SigningDependsOn> | |
CompileAndLink; | |
BeforeSigning; | |
$(InternalSignDependsOn); | |
AfterSigning | |
</SigningDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Signing" | |
DependsOnTargets="$(SigningDependsOn)" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)" | |
Condition=" '@(SignTargetPath)' != '' "> | |
<CreateItem Include="$(IntermediateOutputPath)$(SignedFile)"> | |
<Output TaskParameter="Include" ItemName="FileWrites" /> | |
</CreateItem> | |
<WriteLinesToFile | |
File="$(IntermediateOutputPath)$(SignedFile)" | |
Lines="^$(MSBuildProjectFullPath);@(SignMsm);@(SignCabs);@(SignMsi);@(SignContainers);@(SignBundleEngine);@(SignBundle)" | |
Overwrite="true" /> | |
</Target> | |
<!-- Internal targets so correct signing targets are called. --> | |
<Target | |
Name="GetMsmsToSign" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<CreateItem Include="@(SignTargetPath)"> | |
<Output TaskParameter="Include" ItemName="SignMsm" /> | |
<Output TaskParameter="Include" ItemName="FileWrites" /> | |
</CreateItem> | |
</Target> | |
<Target | |
Name="InternalSignMsm" | |
DependsOnTargets="SignMsm" | |
Condition=" '@(SignMsm)' != '' " /> | |
<Target | |
Name="GetCabsToSign" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<GetCabList Database="%(SignTargetPath.FullPath)"> | |
<Output TaskParameter="CabList" ItemName="SignCabs" /> | |
<Output TaskParameter="CabList" ItemName="FileWrites" /> | |
</GetCabList> | |
</Target> | |
<Target | |
Name="InternalSignCabs" | |
DependsOnTargets="SignCabs" | |
Condition=" '@(SignCabs)' != '' " /> | |
<Target | |
Name="GetMsiToSign" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<CreateItemAvoidingInference InputProperties="@(SignTargetPath)"> | |
<Output TaskParameter="OuputItems" ItemName="SignMsi" /> | |
<Output TaskParameter="OuputItems" ItemName="FileWrites" /> | |
</CreateItemAvoidingInference> | |
</Target> | |
<Target | |
Name="InternalSignMsi" | |
DependsOnTargets="SignMsi" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)" | |
Condition=" '@(SignMsi)' != '' " /> | |
<Target | |
Name="GetContainersToSign" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<!-- TODO: implement signing detached containers --> | |
</Target> | |
<Target | |
Name="InternalSignContainers" | |
DependsOnTargets="SignContainers" | |
Condition=" '@(SignContainers)' != '' " /> | |
<Target | |
Name="InternalSignBundleEngine" | |
DependsOnTargets="SignBundleEngine" | |
Condition=" '@(SignBundleEngine)' != '' " /> | |
<Target | |
Name="InternalSignBundle" | |
DependsOnTargets="SignBundle" | |
Condition=" '@(SignBundle)' != '' " /> | |
<!-- | |
================================================================================================== | |
BeforeSigning | |
Redefine this target in your project in order to run tasks just before all signing tasks. | |
================================================================================================== | |
--> | |
<Target Name="BeforeSigning" /> | |
<!-- | |
================================================================================================== | |
SignMsm | |
Redefine this target in your project in order to sign merge modules. | |
[IN] | |
@(SignMsm) - merge module files to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignMsm" /> | |
<!-- | |
================================================================================================== | |
SignCabs | |
Redefine this target in your project in order to sign the cabs of your database. | |
[IN] | |
@(SignCabs) - cabinet files to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignCabs" /> | |
<!-- | |
================================================================================================== | |
SignMsi | |
Redefine this target in your project in order to sign your database, after it has been inscribed | |
with the signatures of your signed cabs. | |
[IN] | |
@(SignMsi) - database files to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignMsi" /> | |
<!-- | |
================================================================================================== | |
SignContainers | |
Redefine this target in your project in order to sign your bundle's detached containers. | |
[IN] | |
@(SignContainers) - detached container files to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignContainers" /> | |
<!-- | |
================================================================================================== | |
SignBundleEngine | |
Redefine this target in your project in order to sign your bundle, after it has been inscribed | |
with the signatures of your signed containers. | |
[IN] | |
@(SignBundleEngine) - bundle engine file to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignBundleEngine" /> | |
<!-- | |
================================================================================================== | |
SignBundle | |
Redefine this target in your project in order to sign your bundle, after the attached container | |
is reattached. | |
[IN] | |
@(SignBundle) - bundle file to sign. | |
================================================================================================== | |
--> | |
<Target Name="SignBundle" /> | |
<!-- | |
================================================================================================== | |
AfterSigning | |
Redefine this target in your project in order to run tasks just after all signing tasks. | |
================================================================================================== | |
--> | |
<Target Name="AfterSigning" /> | |
<!-- | |
================================================================================================ | |
ConvertReferences | |
Converts project references to HeatProject items to auto generate authoring. | |
================================================================================================ | |
--> | |
<Target | |
Name="ConvertReferences" | |
Condition=" $(EnableProjectHarvesting) and ('$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module') "> | |
<CreateItem Include="@(_MSBuildProjectReferenceExistent)" Condition=" '%(_MSBuildProjectReferenceExistent.DoNotHarvest)' == '' " AdditionalMetadata="DirectoryIds=%(_MSBuildProjectReferenceExistent.RefTargetDir);ProjectOutputGroups=Binaries%3BSymbols%3BSources%3BContent%3BSatellites%3BDocuments;ProjectName=%(_MSBuildProjectReferenceExistent.Name);HeatOutput=$(IntermediateOutputPath)_%(_MSBuildProjectReferenceExistent.Filename).wxs"> | |
<Output TaskParameter="Include" ItemName="HeatProject" /> | |
<Output TaskParameter="Include" ItemName="_HeatProjectReference" /> | |
</CreateItem> | |
<Error | |
Text="The following files are deprecated and should be removed from your project(s): @(Compile->'%(Identity)', ', ')" | |
Condition=" '%(Compile.GenerateComponentGroups)' != '' " /> | |
<CreateItem Include="$(HarvestProjectsGeneratedFile)"> | |
<!-- Unconditionally generate Compile items so they are always linked in. --> | |
<Output TaskParameter="Include" ItemName="Compile" /> | |
<Output TaskParameter="Include" ItemName="_GeneratedFiles" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
ConvertBundleReferences | |
Converts project references in Bundle projects to HeatProject items to auto generate authoring. | |
================================================================================================ | |
--> | |
<Target | |
Name="ConvertBundleReferences" | |
Condition=" $(EnableProjectHarvesting) and ('$(OutputType)' == 'Bundle') "> | |
<CreateItem Include="@(_MSBuildProjectReferenceExistent)" Condition=" '%(_MSBuildProjectReferenceExistent.DoNotHarvest)' == '' " AdditionalMetadata="ProjectOutputGroups=Binaries%3BSymbols%3BSources%3BContent%3BSatellites%3BDocuments;GenerateType=payloadgroup;HeatOutput=$(IntermediateOutputPath)_%(_MSBuildProjectReferenceExistent.Filename).wxs"> | |
<Output TaskParameter="Include" ItemName="HeatProject" /> | |
<Output TaskParameter="Include" ItemName="_HeatProjectReference" /> | |
</CreateItem> | |
<Error | |
Text="The following files are deprecated and should be removed from your project(s): @(Compile->'%(Identity)', ', ')" | |
Condition=" '%(Compile.GenerateComponentGroups)' != '' " /> | |
<CreateItem Include="$(HarvestProjectsGeneratedFile)"> | |
<!-- Unconditionally generate Compile items so they are always linked in. --> | |
<Output TaskParameter="Include" ItemName="Compile" /> | |
<Output TaskParameter="Include" ItemName="_GeneratedFiles" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
CombineHarvestProjects | |
Combines HeatProject and HarvestProject items together and ensures each has HeatOutput metadata. | |
================================================================================================ | |
--> | |
<Target Name="CombineHarvestProjects" | |
Condition=" '@(HeatProject)' != '' or '@(HarvestProject)' != '' "> | |
<!-- Add default HeatOutputs for those without one specified --> | |
<CreateItem Include="@(HeatProject)" Condition= " '%(HeatProject.HeatOutput)' == '' " | |
AdditionalMetadata="HeatOutput=$(IntermediateOutputPath)_%(HeatProject.Filename).wxs"> | |
<Output TaskParameter="Include" ItemName="_AllHeatProjects" /> | |
</CreateItem> | |
<CreateItem Include="@(HarvestProject)" Condition= " '%(HarvestProject.HeatOutput)' == '' " | |
AdditionalMetadata="HeatOutput=$(IntermediateOutputPath)_%(HarvestProject.Filename).wxs"> | |
<Output TaskParameter="Include" ItemName="_AllHeatProjects" /> | |
</CreateItem> | |
<CreateItem Include="@(HeatProject)" Condition= " '%(HeatProject.HeatOutput)' != '' "> | |
<Output TaskParameter="Include" ItemName="_AllHeatProjects" /> | |
</CreateItem> | |
<CreateItem Include="@(HarvestProject)" Condition= " '%(HarvestProject.HeatOutput)' != '' "> | |
<Output TaskParameter="Include" ItemName="_AllHeatProjects" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
HarvestProjects | |
Harvests outputs of other MSBuild projects files using the VS project extension to heat.exe. | |
[IN] | |
@(HarvestProject) | |
@(HeatProject) | |
- The list of projects to harvest. HeatProject is provided for backward compatibility. | |
You should use HarvestProject instead. | |
%(HarvestProject.Transforms) | |
%(HeatProject.Transforms) | |
- XSL transforms to apply to the harvested WiX. | |
%(HarvestProject.ProjectOutputGroups) | |
%(HeatProjects.ProjectOutputGroups) | |
- The project output groups to harvest | |
[OUT] | |
%(HeatOutput) | |
- The generated .wxs files which are added to the @(Compile) item list. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<HarvestProjectsDependsOn>CombineHarvestProjects</HarvestProjectsDependsOn> | |
</PropertyGroup> | |
<Target Name="HarvestProjects" | |
DependsOnTargets="$(HarvestProjectsDependsOn)" | |
Inputs="@(_AllHeatProjects);%(_AllHeatProjects.Transforms);$(MSBuildAllProjects);$(ProjectPath)" | |
Outputs="@(_AllHeatProjects -> '%(HeatOutput)')" | |
Condition=" $(EnableProjectHarvesting) and ('@(HeatProject)' != '' or '@(HarvestProject)' != '') "> | |
<!--For HeatProject items supporting MSBuild 2.0--> | |
<HeatProject | |
NoLogo="$(HarvestProjectsNoLogo)" | |
SuppressAllWarnings="$(HarvestProjectsSuppressAllWarnings)" | |
SuppressSpecificWarnings="$(HarvestProjectsSuppressSpecificWarnings)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(HarvestProjectsTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(HarvestProjectsTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(HarvestProjectsVerboseOutput)" | |
AutogenerateGuids="$(HarvestProjectsAutogenerateGuids)" | |
GenerateGuidsNow="$(HarvestProjectsGenerateGuidsNow)" | |
OutputFile="%(_AllHeatProjects.HeatOutput)" | |
SuppressFragments="$(HarvestProjectsSuppressFragments)" | |
SuppressUniqueIds="$(HarvestProjectsSuppressUniqueIds)" | |
Transforms="%(_AllHeatProjects.Transforms)" | |
Project="%(_AllHeatProjects.FullPath)" | |
ProjectOutputGroups="%(_AllHeatProjects.ProjectOutputGroups)" | |
GenerateType="%(_AllHeatProjects.GenerateType)" | |
DirectoryIds="%(_AllHeatProjects.DirectoryIds)" | |
ProjectName="%(_AllHeatProjects.ProjectName)" | |
Configuration="%(_AllHeatProjects.Configuration)" | |
Platform="%(_AllHeatProjects.Platform)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
GenerateWixVariables="$(HarvestProjectsGenerateWixVariables)" | |
AdditionalOptions="$(HarvestProjectsAdditionalOptions)"> | |
<Output TaskParameter="OutputFile" ItemName="Compile" /> | |
<Output TaskParameter="OutputFile" ItemName="FileWrites" /> | |
</HeatProject> | |
</Target> | |
<!-- | |
================================================================================================ | |
HarvestDirectory | |
Harvests directories using heat.exe. | |
[IN] | |
@(HarvestDirectory) - The list of directories to harvest. | |
%(HarvestDirectory.Transforms) - XSL transforms to apply to the harvested WiX. | |
%(HarvestDirectory.ComponentGroupName) - The name of the ComponentGroup to create. | |
%(HarvestDirectory.DirectoryRefId) - The ID of the directory to reference instead of TARGETDIR. | |
%(HarvestDirectory.KeepEmptyDirectories) - Whether to create Directory entries for empty directories. | |
%(HarvestDirectory.PreprocessorVariable) - Substitute SourceDir for another variable name (ex: var.Dir). | |
%(HarvestDirectory.SuppressCom) - Suppress COM elements. | |
%(HarvestDirectory.SuppressRootDirectory) - Suppress a Directory element for the root directory. | |
$(HarvestDirectory.SuppressRegistry) - Suppress registry harvesting. | |
[OUT] | |
$(IntermediateOutputPath)_%(HarvestDirectory.ComponentGroupName)_dir.wxs | |
- The generated .wxs files which are added to the @(Compile) item list. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<HarvestDirectoryDependsOn> | |
GetHarvestDirectoryContent | |
</HarvestDirectoryDependsOn> | |
</PropertyGroup> | |
<!-- Creates items to include content since wildcards will not work in Target/@Inputs. --> | |
<Target Name="GetHarvestDirectoryContent"> | |
<CreateItem Include="@(HarvestDirectory->'%(FullPath)\**\*')"> | |
<Output TaskParameter="Include" ItemName="_HarvestDirectoryContent" /> | |
</CreateItem> | |
</Target> | |
<Target Name="HarvestDirectory" | |
DependsOnTargets="$(HarvestDirectoryDependsOn)" | |
Inputs="@(_HarvestDirectoryContent);%(HarvestDirectory.Transforms)" | |
Outputs="$(IntermediateOutputPath)_%(HarvestDirectory.ComponentGroupName)_dir.wxs" | |
Condition=" '@(HarvestDirectory)' != '' "> | |
<HeatDirectory | |
NoLogo="$(HarvestDirectoryNoLogo)" | |
SuppressAllWarnings="$(HarvestDirectorySuppressAllWarnings)" | |
SuppressSpecificWarnings="$(HarvestDirectorySuppressSpecificWarnings)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(HarvestDirectoryTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(HarvestDirectoryTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(HarvestDirectoryVerboseOutput)" | |
AutogenerateGuids="$(HarvestDirectoryAutogenerateGuids)" | |
GenerateGuidsNow="$(HarvestDirectoryGenerateGuidsNow)" | |
OutputFile="$(IntermediateOutputPath)_%(HarvestDirectory.ComponentGroupName)_dir.wxs" | |
SuppressFragments="$(HarvestDirectorySuppressFragments)" | |
SuppressUniqueIds="$(HarvestDirectorySuppressUniqueIds)" | |
Transforms="%(HarvestDirectory.Transforms)" | |
Directory="@(HarvestDirectory)" | |
ComponentGroupName="%(HarvestDirectory.ComponentGroupName)" | |
DirectoryRefId="%(HarvestDirectory.DirectoryRefId)" | |
KeepEmptyDirectories="%(HarvestDirectory.KeepEmptyDirectories)" | |
PreprocessorVariable="%(HarvestDirectory.PreprocessorVariable)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressCom="%(HarvestDirectory.SuppressCom)" | |
SuppressRootDirectory="%(HarvestDirectory.SuppressRootDirectory)" | |
SuppressRegistry="%(HarvestDirectory.SuppressRegistry)" | |
AdditionalOptions="$(HarvestDirectoryAdditionalOptions)"> | |
<Output TaskParameter="OutputFile" ItemName="Compile" /> | |
<Output TaskParameter="OutputFile" ItemName="FileWrites" /> | |
</HeatDirectory> | |
</Target> | |
<!-- | |
================================================================================================ | |
HarvestFile | |
Harvests files of different types using heat.exe. This can harvest registry from | |
self-registering files, files with typelibs, and more. | |
[IN] | |
@(HarvestFile) - The list of files to harvest. | |
%(HarvestFile.Transforms) - XSL transforms to apply to the harvested WiX. | |
%(HarvestFile.ComponentGroupName) - The name of the ComponentGroup to create. | |
%(HarvestFile.DirectoryRefId) - The ID of the directory to reference instead of TARGETDIR. | |
%(HarvestFile.PreprocessorVariable) - Substitute SourceDir for another variable name (ex: var.Dir). | |
%(HarvestFile.SuppressCom) - Suppress COM elements. | |
%(HarvestFile.SuppressRootDirectory) - Suppress a Directory element for the root directory. | |
$(HarvestFile.SuppressRegistry) - Suppress registry harvesting. | |
[OUT] | |
$(IntermediateOutputPath)_%(HarvestFile.Filename)_file.wxs | |
- The generated .wxs files which are added to the @(Compile) item list. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<HarvestFileDependsOn></HarvestFileDependsOn> | |
</PropertyGroup> | |
<Target Name="HarvestFile" | |
DependsOnTargets="$(HarvestFileDependsOn)" | |
Inputs="@(HarvestFile);%(HarvestFile.Transforms)" | |
Outputs="$(IntermediateOutputPath)_%(HarvestFile.Filename)_file.wxs" | |
Condition=" '@(HarvestFile)' != '' "> | |
<HeatFile | |
NoLogo="$(HarvestFileNoLogo)" | |
SuppressAllWarnings="$(HarvestFileSuppressAllWarnings)" | |
SuppressSpecificWarnings="$(HarvestFileSuppressSpecificWarnings)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(HarvestFileTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(HarvestFileTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(HarvestFileVerboseOutput)" | |
AutogenerateGuids="$(HarvestFileAutogenerateGuids)" | |
GenerateGuidsNow="$(HarvestFileGenerateGuidsNow)" | |
OutputFile="$(IntermediateOutputPath)_%(HarvestFile.Filename)_file.wxs" | |
SuppressFragments="$(HarvestFileSuppressFragments)" | |
SuppressUniqueIds="$(HarvestFileSuppressUniqueIds)" | |
Transforms="%(HarvestFile.Transforms)" | |
File="@(HarvestFile)" | |
ComponentGroupName="%(HarvestFile.ComponentGroupName)" | |
DirectoryRefId="%(HarvestFile.DirectoryRefId)" | |
PreprocessorVariable="%(HarvestFile.PreprocessorVariable)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressCom="%(HarvestFile.SuppressCom)" | |
SuppressRegistry="%(HarvestFile.SuppressRegistry)" | |
SuppressRootDirectory="%(HarvestFile.SuppressRootDirectory)" | |
AdditionalOptions="$(HarvestFileAdditionalOptions)"> | |
<Output TaskParameter="OutputFile" ItemName="Compile" /> | |
<Output TaskParameter="OutputFile" ItemName="FileWrites" /> | |
</HeatFile> | |
</Target> | |
<!-- | |
================================================================================================ | |
RefreshGeneratedFile | |
Generates code based on metadata defined in project references. | |
[IN] | |
@(_MSBuildResolvedProjectReferencePaths) - The list of MSBuildable project references. | |
[OUT] | |
@(_GeneratedFiles) - The generated source file. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<RefreshGeneratedFileDependsOn></RefreshGeneratedFileDependsOn> | |
</PropertyGroup> | |
<Target Name="RefreshGeneratedFile" | |
DependsOnTargets="$(RefreshGeneratedFileDependsOn)" | |
Inputs="@(_MSBuildResolvedProjectReferencePaths);@(Compile);$(ProjectPath)" | |
Outputs="@(_GeneratedFiles)" | |
Condition=" $(EnableProjectHarvesting) and (('$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module') and '@(_GeneratedFiles)' != '') "> | |
<RefreshGeneratedFile | |
GeneratedFiles="@(_GeneratedFiles)" | |
ProjectReferencePaths="@(_MSBuildResolvedProjectReferencePaths)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
RefreshBundleGeneratedFile | |
Generates code for bundle projects based on metadata defined in project references. | |
[IN] | |
@(_MSBuildResolvedProjectReferencePaths) - The list of MSBuildable project references. | |
[OUT] | |
@(_GeneratedFiles) - The generated source file. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<RefreshBundleGeneratedFileDependsOn></RefreshBundleGeneratedFileDependsOn> | |
</PropertyGroup> | |
<Target Name="RefreshBundleGeneratedFile" | |
DependsOnTargets="$(RefreshBundleGeneratedFileDependsOn)" | |
Inputs="@(_MSBuildResolvedProjectReferencePaths);@(Compile);$(ProjectPath)" | |
Outputs="@(_GeneratedFiles)" | |
Condition=" $(EnableProjectHarvesting) and ('$(OutputType)' == 'Bundle' and '@(_GeneratedFiles)' != '') "> | |
<RefreshBundleGeneratedFile | |
GeneratedFiles="@(_GeneratedFiles)" | |
ProjectReferencePaths="@(_MSBuildResolvedProjectReferencePaths)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
GenerateCompileWithObjectPath | |
Generates metadata on the for compile output objects. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<GenerateCompileWithObjectPathDependsOn></GenerateCompileWithObjectPathDependsOn> | |
</PropertyGroup> | |
<Target Name="GenerateCompileWithObjectPath" | |
Condition=" '@(Compile)' != '' "> | |
<GenerateCompileWithObjectPath | |
Compile="@(Compile)" | |
IntermediateOutputPath="$(IntermediateOutputPath)"> | |
<Output TaskParameter="CompileWithObjectPath" ItemName="_CompileWithObjectPath" /> | |
</GenerateCompileWithObjectPath> | |
</Target> | |
<!-- | |
================================================================================================ | |
Compile | |
Compiles the wxs files into wixobj files using candle.exe. | |
[IN] | |
@(Compile) - The list of wxs files to compile. | |
@(Content) - Files that the project uses in the installer. | |
@(WixExtension) - The list of wixlib or wix dll extensions. | |
[OUT] | |
@(CompileObjOutput) - The compiled .wixobj files. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<CompileDependsOn> | |
PrepareForBuild; | |
ResolveWixExtensionReferences; | |
GenerateCompileWithObjectPath | |
</CompileDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Compile" | |
Inputs="@(Compile); | |
@(Content); | |
@(_ResolvedWixExtensionPaths); | |
@(_ResolvedProjectReferencePaths); | |
$(MSBuildAllProjects)" | |
Outputs="@(_CompileWithObjectPath -> '%(ObjectPath)%(Filename)$(IntermediateExt)')" | |
DependsOnTargets="$(CompileDependsOn)" | |
Condition=" '@(Compile)' != '' "> | |
<Candle | |
SourceFiles="@(_CompileWithObjectPath)" | |
AdditionalOptions="$(CompilerAdditionalOptions)" | |
DefineConstants="$(DefineConstants);$(SolutionDefineConstants);$(ProjectDefineConstants);$(ProjectReferenceDefineConstants)" | |
ExtensionDirectory="$(WixExtDir)" | |
Extensions="@(_ResolvedWixExtensionPaths)" | |
FipsCompliant="$(FipsCompliant)" | |
SuppressFilesVitalByDefault="$(SuppressFilesVitalByDefault)" | |
PreprocessToStdOut="$(PreprocessToStdOut)" | |
PreprocessToFile="$(PreprocessToFile)" | |
IncludeSearchPaths="$(IncludeSearchPaths)" | |
InstallerPlatform="$(InstallerPlatform)" | |
NoLogo="$(CompilerNoLogo)" | |
OnlyValidateDocuments="$(OnlyValidateDocuments)" | |
OutputFile="%(_CompileWithObjectPath.ObjectPath)" | |
Pedantic="$(Pedantic)" | |
ReferencePaths="$(ReferencePaths)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
ShowSourceTrace="$(ShowSourceTrace)" | |
SuppressAllWarnings="$(CompilerSuppressAllWarnings)" | |
SuppressSchemaValidation="$(CompilerSuppressSchemaValidation)" | |
SuppressSpecificWarnings="$(CompilerSuppressSpecificWarnings)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(CompilerTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(CompilerTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(CompilerVerboseOutput)"> | |
</Candle> | |
<!-- These will be still be set if the Compile target is up to date. --> | |
<CreateItem Include="@(_CompileWithObjectPath -> '%(ObjectPath)%(Filename)$(IntermediateExt)')"> | |
<Output TaskParameter="Include" ItemName="CompileObjOutput" /> | |
</CreateItem> | |
<CreateItem Include="@(CompileObjOutput)"> | |
<Output TaskParameter="Include" ItemName="FileWrites" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
InscribeMsi | |
To be called after signing an MSI's cabs - inscribes an MSI with the digital signature of its | |
external cabs. | |
[IN/OUT] | |
@(SignTargetPath) - The database file to inscribe - database file will be modified in-place. | |
[OUT] | |
@(SignMsi) - The database file to sign. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<InscribeMsiDependsOn> | |
PrepareForBuild; | |
ResolveWixExtensionReferences; | |
CompileAndLink; | |
InternalSignCabs | |
</InscribeMsiDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="InscribeMsi" | |
DependsOnTargets="$(InscribeMsiDependsOn)" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)" | |
Condition=" '@(SignCabs)' != '' "> | |
<Insignia | |
DatabaseFile="%(SignTargetPath.FullPath)" | |
OutputFile="%(SignTargetPath.FullPath)" | |
ToolPath="$(WixToolPath)" | |
NoLogo="$(InscribeNoLogo)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressAllWarnings="$(InscribeSuppressAllWarnings)" | |
SuppressSpecificWarnings="$(InscribeSuppressSpecificWarnings)" | |
TreatWarningsAsErrors="$(InscribeTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(InscribeTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(InscribeVerboseOutput)" | |
AdditionalOptions="$(InscribeAdditionalOptions)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
InscribeBundleEngine | |
To be called after signing a bundle's detached containers. Also removes attached container | |
so engine can be signed without attached container. | |
[IN] | |
@(SignTargetPath) - The bundle to inscribe. | |
[OUT] | |
@(SignBundleEngine) - The bundle engine file to be signed. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<InscribeBundleEngineDependsOn> | |
PrepareForBuild; | |
ResolveWixExtensionReferences; | |
CompileAndLink; | |
InternalSignContainers | |
</InscribeBundleEngineDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="InscribeBundleEngine" | |
DependsOnTargets="$(InscribeBundleEngineDependsOn)" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<Insignia | |
BundleFile="@(SignTargetPath)" | |
OutputFile="$(IntermediateOutputPath)%(SignTargetPath.Filename)%(SignTargetPath.Extension)" | |
ToolPath="$(WixToolPath)" | |
NoLogo="$(InscribeNoLogo)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressAllWarnings="$(InscribeSuppressAllWarnings)" | |
SuppressSpecificWarnings="$(InscribeSuppressSpecificWarnings)" | |
TreatWarningsAsErrors="$(InscribeTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(InscribeTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(InscribeVerboseOutput)" | |
AdditionalOptions="$(InscribeAdditionalOptions)"> | |
<Output TaskParameter="Output" ItemName="SignBundleEngine" /> | |
</Insignia> | |
<!-- Explicitly add output to FileWrites to ensure even when the target is up to date. --> | |
<CreateItem Include="$(IntermediateOutputPath)%(SignTargetPath.Filename)%(SignTargetPath.Extension)"> | |
<Output TaskParameter="Include" ItemName="FileWrites" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
InscribeBundle | |
To be called after signing the bundle engine to reattach the attached container. | |
[IN] | |
@(Inscribe) - The bundle to inscribe. | |
[OUT] | |
@(SignBundle) - The bundle engine file to be signed. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<InscribeBundleDependsOn> | |
PrepareForBuild; | |
ResolveWixExtensionReferences; | |
CompileAndLink; | |
InternalSignBundleEngine | |
</InscribeBundleDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="InscribeBundle" | |
DependsOnTargets="$(InscribeBundleDependsOn)" | |
Inputs="@(SignTargetPath)" | |
Outputs="$(IntermediateOutputPath)$(SignedFile)"> | |
<Insignia | |
BundleFile="@(SignBundleEngine)" | |
OriginalBundleFile="@(SignTargetPath)" | |
OutputFile="@(SignTargetPath)" | |
ToolPath="$(WixToolPath)" | |
NoLogo="$(InscribeNoLogo)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressAllWarnings="$(InscribeSuppressAllWarnings)" | |
SuppressSpecificWarnings="$(InscribeSuppressSpecificWarnings)" | |
TreatWarningsAsErrors="$(InscribeTreatWarningsAsErrors)" | |
TreatSpecificWarningsAsErrors="$(InscribeTreatSpecificWarningsAsErrors)" | |
VerboseOutput="$(InscribeVerboseOutput)" | |
AdditionalOptions="$(InscribeAdditionalOptions)"> | |
<Output TaskParameter="Output" ItemName="SignBundle" /> | |
<Output TaskParameter="Output" ItemName="FileWrites" /> | |
</Insignia> | |
</Target> | |
<!-- | |
================================================================================================ | |
Lib | |
Links the .wixobj, .wxl, .wixlib, wix extensions into a .wixlib file using lit.exe. | |
[IN] | |
@(CompileObjOutput) - The compiled .wixobj file. | |
@(EmbeddedResource) - The list of wxl files to use for localization. | |
@(WixObject) - The list of .wixobj files. | |
@(WixLibrary) - The list of .wixlib files. | |
@(WixExtension) - The list of wix dll extension files. | |
[OUT] | |
$(TargetPath) - The compiled .wixlib file. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<LibDependsOn> | |
PrepareForBuild; | |
ResolveWixExtensionReferences | |
</LibDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Lib" | |
Inputs="@(CompileObjOutput); | |
@(EmbeddedResource); | |
@(WixObject); | |
@(WixLibrary); | |
@(_ResolvedWixExtensionPaths); | |
$(MSBuildAllProjects)" | |
Outputs="$(TargetPath)" | |
DependsOnTargets="$(LibDependsOn)" | |
Condition=" '$(OutputType)' == 'Library' "> | |
<Lit | |
ObjectFiles="@(CompileObjOutput);@(WixObject);@(WixLibProjects);@(WixLibrary)" | |
AdditionalOptions="$(LibAdditionalOptions)" | |
BindInputPaths="@(LinkerBindInputPaths)" | |
BindFiles="$(LibBindFiles)" | |
ExtensionDirectory="$(WixExtDir)" | |
Extensions="@(_ResolvedWixExtensionPaths)" | |
LocalizationFiles="@(EmbeddedResource)" | |
NoLogo="$(LibNoLogo)" | |
OutputFile="$(TargetPath)" | |
Pedantic="$(LibPedantic)" | |
ReferencePaths="$(ReferencePaths)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SuppressAllWarnings="$(LibSuppressAllWarnings)" | |
SuppressIntermediateFileVersionMatching="$(LibSuppressIntermediateFileVersionMatching)" | |
SuppressSchemaValidation="$(LibSuppressSchemaValidation)" | |
SuppressSpecificWarnings="$(LibSuppressSpecificWarnings)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(LibTreatWarningsAsErrors)" | |
VerboseOutput="$(LibVerboseOutput)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
AssignCultures | |
Determines the final list of culture groups to build based on either the Cultures property or | |
those specified in .wxl files. | |
Culture groups specified in the Cultures property must be specified as a semi-colon | |
delimited list of groups, with comma-delimited cultures within a group. | |
For example: | |
<Cultures>en-US,en;en-GB,en</Cultures> | |
This will build 2 targets, outputing to en-US and en-GB sub-folders. Light will first look | |
for strings in the first culture (en-US or en-GB) then the second (en). | |
Cultures of .wxl files will be used when the Culture property is not set. The culture of a | |
.wxl file is determined by the Culture attribute in the WixLocalization element in the file | |
Sets the OutputFolder metadata on each culture group. In most cases this is the same as the | |
first culture in the culture group. When the Culture's property is unspecified and no .wxl | |
files are provided this is the same as the output directory. When the Culture's property | |
specifies a single culture group and no .wxl files are provided this is the same as the output | |
directory. | |
Updates the TargetPath and TargetPdbPath properties to be used in subsequent targets. | |
[IN] | |
@(EmbeddedResource) - The list of wxl files to use for localization. | |
$(Cultures) - The list of culture groups to build. | |
[OUT] | |
@(CultureGroup) - The list of culture group strings with OutputFolder metadata | |
$(TargetPath) - Property list of target link output MSIs/MSMs | |
$(TargetPdbPath) - Property list of target output pdbs | |
================================================================================================ | |
--> | |
<Target | |
Name="AssignCultures" | |
Condition=" ('$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module')"> | |
<WixAssignCulture | |
Cultures="$(Cultures)" | |
Files="@(EmbeddedResource)" | |
> | |
<Output TaskParameter="CultureGroups" ItemName="CultureGroup" /> | |
</WixAssignCulture> | |
<!-- Build an itemgroup of outputs --> | |
<CreateItem | |
Include="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetName)$(TargetExt)"> | |
<Output TaskParameter="Include" | |
ItemName="_TargetPathItems"/> | |
</CreateItem> | |
<!-- Convert the itemgroup to a semicolon-delimited property --> | |
<CreateProperty | |
Value="@(_TargetPathItems)"> | |
<Output TaskParameter="Value" | |
PropertyName="TargetPath"/> | |
</CreateProperty> | |
<!-- Build an itemgroup of PDB outputs --> | |
<CreateItem | |
Include="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbName)"> | |
<Output TaskParameter="Include" | |
ItemName="_TargetPdbPathItems"/> | |
</CreateItem> | |
<!-- Convert the itemgroup to a semicolon-delimited property --> | |
<CreateProperty | |
Value="@(_TargetPdbPathItems)"> | |
<Output TaskParameter="Value" | |
PropertyName="TargetPdbPath"/> | |
</CreateProperty> | |
<!-- Set the sign target items, if we're signing output. --> | |
<CreateItem | |
Include="@(_TargetPathItems)" | |
Condition=" '$(SignOutput)' == 'true' AND '$(SuppressLayout)' != 'true' "> | |
<Output TaskParameter="Include" | |
ItemName="SignTargetPath"/> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================ | |
ReadPreviousBindInputsAndBuiltOutputs | |
Reads a previous build's Bind contents and built outputs file into @(_BindInputs) and | |
@(_BindBuiltOutputs) respectively. | |
Note: Only the *built* outputs are used because using files copied to output folder | |
can cause perpetual incremental build. | |
Imagine the case where you have: Msi.wixproj -> Lib.wixproj -> Exe.csproj. The | |
Exe.csproj cannot be both an input to Lib.wixproj and an output of Msi.wixproj | |
(as an uncompressed file) because the Lib.wixproj will always newer than the | |
Exe.csproj. | |
[IN] | |
[OUT] | |
@(_BindInputs) - the content files required to bind (i.e. the Binary/@SourceFile and File/@Source files). | |
@(_BindBuiltOutputs) - the previously built .msi, .msm, .pcp, .exe .wixpdb, .cabs, etc. | |
Does not include content copied to output folder. | |
================================================================================================ | |
--> | |
<Target | |
Name="ReadPreviousBindInputsAndBuiltOutputs" | |
Condition=" ('$(OutputType)' == 'Bundle' or '$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module')"> | |
<ReadLinesFromFile File="$(IntermediateOutputPath)$(BindContentsFilePrefix)%(CultureGroup.Identity)$(BindContentsFileExtension)"> | |
<Output TaskParameter="Lines" ItemName="_BindInputs" /> | |
</ReadLinesFromFile> | |
<ReadLinesFromFile File="$(IntermediateOutputPath)$(BindBuiltOutputsFilePrefix)%(CultureGroup.Identity)$(BindBuiltOutputsFileExtension)"> | |
<Output TaskParameter="Lines" ItemName="_BindBuiltOutputs" /> | |
</ReadLinesFromFile> | |
<Message Importance="low" Text="Previous bind inputs: @(_BindInputs)" /> | |
<Message Importance="low" Text="Previous bind outputs: @(_BindBuiltOutputs)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
Link | |
Links the .wixobj, .wxl, .wixlib, wix extensions into an .msi or .msm file using light.exe, | |
once per culture group. All WXL files are passed into light and the culture switch determines | |
which are used | |
[IN] | |
@(CompileObjOutput) - The compiled .wixobj file. | |
@(CultureGroup) - The cultures to build | |
@(EmbeddedResource) - The list of wxl files to use for localization. | |
@(WixObject) - The list of .wixobj files. | |
@(WixLibrary) - The list of .wixlib files. | |
@(WixExtension) - The list of wix dll extension files. | |
[OUT] | |
$(TargetDir)\%(Culture)\$(TargetName)$(TargetExt) - The compiled .msi, .msm, or .exe files. | |
================================================================================================ | |
--> | |
<PropertyGroup> | |
<LinkDependsOn> | |
PrepareForBuild; | |
ResolveReferences; | |
AssignCultures; | |
ReadPreviousBindInputsAndBuiltOutputs; | |
</LinkDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Link" | |
Inputs="@(CompileObjOutput); | |
@(EmbeddedResource); | |
@(WixObject); | |
@(_ResolvedProjectReferencePaths); | |
@(_ResolvedWixLibraryPaths); | |
@(_ResolvedWixExtensionPaths); | |
$(MSBuildAllProjects); | |
@(_BindInputs)" | |
Outputs="$(IntermediateOutputPath)$(BindBuiltOutputsFilePrefix)%(CultureGroup.Identity)$(BindBuiltOutputsFileExtension);@(_BindBuiltOutputs)" | |
DependsOnTargets="$(LinkDependsOn)" | |
Condition=" ('$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module' or '$(OutputType)' == 'Bundle')"> | |
<CreateProperty Value="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbName)"> | |
<Output TaskParameter="Value" PropertyName="PdbOutputFile" /> | |
</CreateProperty> | |
<!-- Call light using the culture subdirectory for output --> | |
<Light | |
ObjectFiles="@(CompileObjOutput);@(WixObject);@(WixLibProjects);@(_ResolvedWixLibraryPaths)" | |
AdditionalOptions="$(LinkerAdditionalOptions)" | |
AllowIdenticalRows="$(AllowIdenticalRows)" | |
AllowUnresolvedReferences="$(AllowUnresolvedReferences)" | |
AdditionalCub="$(AdditionalCub)" | |
BackwardsCompatibleGuidGeneration="$(BackwardsCompatibleGuidGeneration)" | |
BindInputPaths="@(LinkerBindInputPaths)" | |
BindFiles="$(LinkerBindFiles)" | |
BindContentsFile="$(IntermediateOutputPath)$(BindContentsFilePrefix)%(CultureGroup.Identity)$(BindContentsFileExtension)" | |
BindOutputsFile="$(IntermediateOutputPath)$(BindOutputsFilePrefix)%(CultureGroup.Identity)$(BindOutputsFileExtension)" | |
BindBuiltOutputsFile="$(IntermediateOutputPath)$(BindBuiltOutputsFilePrefix)%(CultureGroup.Identity)$(BindBuiltOutputsFileExtension)" | |
CabinetCachePath="$(CabinetCachePath)" | |
CabinetCreationThreadCount="$(CabinetCreationThreadCount)" | |
Cultures="%(CultureGroup.Identity)" | |
CustomBinder="$(CustomBinder)" | |
DefaultCompressionLevel="$(DefaultCompressionLevel)" | |
DropUnrealTables="$(DropUnrealTables)" | |
ExactAssemblyVersions="$(ExactAssemblyVersions)" | |
ExtensionDirectory="$(WixExtDir)" | |
Extensions="@(_ResolvedWixExtensionPaths)" | |
Ices="$(Ices)" | |
LeaveTemporaryFiles="$(LeaveTemporaryFiles)" | |
LocalizationFiles="@(EmbeddedResource)" | |
NoLogo="$(LinkerNoLogo)" | |
OutputAsXml="$(OutputAsXml)" | |
OutputFile="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetName)$(TargetExt)" | |
PdbOutputFile="$(PdbOutputFile)" | |
Pedantic="$(LinkerPedantic)" | |
ReferencePaths="$(ReferencePaths)" | |
ReuseCabinetCache="$(ReuseCabinetCache)" | |
RunAsSeparateProcess="$(RunWixToolsOutOfProc)" | |
SetMsiAssemblyNameFileVersion="$(SetMsiAssemblyNameFileVersion)" | |
SuppressAclReset="$(SuppressAclReset)" | |
SuppressAllWarnings="$(LinkerSuppressAllWarnings)" | |
SuppressAssemblies="$(SuppressAssemblies)" | |
SuppressDefaultAdminSequenceActions="$(SuppressDefaultAdminSequenceActions)" | |
SuppressDefaultAdvSequenceActions="$(SuppressDefaultAdvSequenceActions)" | |
SuppressDefaultUISequenceActions="$(SuppressDefaultUISequenceActions)" | |
SuppressFileHashAndInfo="$(SuppressFileHashAndInfo)" | |
SuppressFiles="$(SuppressFiles)" | |
SuppressIntermediateFileVersionMatching="$(LinkerSuppressIntermediateFileVersionMatching)" | |
SuppressIces="$(SuppressIces)" | |
SuppressLayout="$(SuppressLayout)" | |
SuppressLocalization="$(SuppressLocalization)" | |
SuppressMsiAssemblyTableProcessing="$(SuppressMsiAssemblyTableProcessing)" | |
SuppressPdbOutput="$(SuppressPdbOutput)" | |
SuppressSchemaValidation="$(LinkerSuppressSchemaValidation)" | |
SuppressValidation="$(SuppressValidation)" | |
SuppressSpecificWarnings="$(LinkerSuppressSpecificWarnings)" | |
SuppressTagSectionIdAttributeOnTuples="$(SuppressTagSectionIdAttributeOnTuples)" | |
ToolPath="$(WixToolPath)" | |
TreatWarningsAsErrors="$(LinkerTreatWarningsAsErrors)" | |
UnreferencedSymbolsFile="$(UnreferencedSymbolsFile)" | |
VerboseOutput="$(LinkerVerboseOutput)" | |
WixProjectFile="$(ProjectPath)" | |
WixVariables="$(WixVariables)" /> | |
</Target> | |
<!-- | |
================================================================================================ | |
UpdateLinkFileWrites | |
Reads the bind outputs file(s) output generated during Link to correctly set the @(FileWrites) | |
item. Most targets have it easy because they can do a static mapping from inputs to the outputs. | |
However, the Link target outputs are determined after a rather complex calculation we call | |
linking and binding! | |
This is an "after target" of Link to ensure it always runs, even if Link was up to date. It | |
reads the outputs file generated during the Link target. | |
[IN] | |
Path to bind outputs file(s). | |
[OUT] | |
@(FileWrites) updated with outputs from bind. | |
================================================================================================ | |
--> | |
<Target | |
Name="UpdateLinkFileWrites" | |
Condition=" ('$(OutputType)' == 'Bundle' or '$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module' or '$(OutputType)' == 'Bundle')"> | |
<ReadLinesFromFile File="$(IntermediateOutputPath)$(BindOutputsFilePrefix)%(CultureGroup.Identity)$(BindOutputsFileExtension)"> | |
<Output TaskParameter="Lines" ItemName="FileWrites"/> | |
</ReadLinesFromFile> | |
<CreateItem Include="$(IntermediateOutputPath)$(BindContentsFilePrefix)%(CultureGroup.Identity)$(BindContentsFileExtension);$(IntermediateOutputPath)$(BindOutputsFilePrefix)%(CultureGroup.Identity)$(BindOutputsFileExtension);$(IntermediateOutputPath)$(BindBuiltOutputsFilePrefix)%(CultureGroup.Identity)$(BindBuiltOutputsFileExtension)"> | |
<Output TaskParameter="Include" ItemName="FileWrites" /> | |
</CreateItem> | |
<Message Importance="low" Text="Build files after link: @(FileWrites)" /> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
IncrementalClean Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
IncrementalClean | |
Remove files that were produced in a prior build but weren't produced in the current build. | |
The reason is that if, for example, the name of the .msi/.msm has changed we want to delete the | |
old copy. | |
Leave the Clean cache file containing only the files produced in the current build. | |
================================================================================================== | |
--> | |
<Target | |
Name="IncrementalClean" | |
DependsOnTargets="_CleanGetCurrentAndPriorFileWrites"> | |
<!-- Subtract list of files produced in this build from list of files produced in prior builds. --> | |
<CreateItem Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanCurrentFileWrites)"> | |
<Output TaskParameter="Include" ItemName="_CleanOrphanFileWrites" /> | |
</CreateItem> | |
<!-- Find all files in the final output directory. --> | |
<FindUnderPath Path="$(OutDir)" Files="@(_CleanOrphanFileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanOrphanFileWritesInOutput" /> | |
</FindUnderPath> | |
<!-- Find all files in the intermediate output directory. --> | |
<FindUnderPath Path="$(IntermediateOutputPath)" Files="@(_CleanOrphanFileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanOrphanFileWritesInIntermediate" /> | |
</FindUnderPath> | |
<!-- Delete the orphaned files. --> | |
<Delete | |
Files="@(_CleanOrphanFileWritesInIntermediate);@(_CleanOrphanFileWritesInOutput)" | |
TreatErrorsAsWarnings="true"> | |
<Output TaskParameter="DeletedFiles" ItemName="_CleanOrphanFilesDeleted" /> | |
</Delete> | |
<!-- Create a list of everything that wasn't deleted. --> | |
<CreateItem Include="@(_CleanPriorFileWrites);@(_CleanCurrentFileWrites)" Exclude="@(_CleanOrphanFilesDeleted)"> | |
<Output TaskParameter="Include" ItemName="_CleanRemainingFileWritesAfterIncrementalClean" /> | |
</CreateItem> | |
<!-- Remove duplicates. --> | |
<RemoveDuplicates Inputs="@(_CleanRemainingFileWritesAfterIncrementalClean)"> | |
<Output TaskParameter="Filtered" ItemName="_CleanUniqueRemainingFileWritesAfterIncrementalClean" /> | |
</RemoveDuplicates> | |
<!-- Make sure the directory exists. --> | |
<MakeDir Directories="$(IntermediateOutputPath)" /> | |
<!-- Write new list of current files back to disk, replacing the existing list.--> | |
<WriteLinesToFile | |
File="$(IntermediateOutputPath)$(CleanFile)" | |
Lines="@(_CleanUniqueRemainingFileWritesAfterIncrementalClean)" | |
Overwrite="true" /> | |
</Target> | |
<!-- | |
================================================================================================== | |
_CleanGetCurrentAndPriorFileWrites | |
Get the list of files built in a prior build and the current build. | |
================================================================================================== | |
--> | |
<Target | |
Name="_CleanGetCurrentAndPriorFileWrites"> | |
<!-- Read the list of files produced by a prior build from disk. --> | |
<ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)"> | |
<Output TaskParameter="Lines" ItemName="_CleanPriorFileWrites" /> | |
</ReadLinesFromFile> | |
<!-- Find all files in the final output directory. --> | |
<FindUnderPath Path="$(OutDir)" Files="@(FileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanCurrentFileWritesInOutput" /> | |
</FindUnderPath> | |
<!-- Find all files in the intermediate output directory. --> | |
<FindUnderPath Path="$(IntermediateOutputPath)" Files="@(FileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanCurrentFileWritesInIntermediate" /> | |
</FindUnderPath> | |
<!-- Remove duplicates from files produced in this build. --> | |
<RemoveDuplicates Inputs="@(_CleanCurrentFileWritesInOutput);@(_CleanCurrentFileWritesInIntermediate)"> | |
<Output TaskParameter="Filtered" ItemName="_CleanCurrentFileWrites" /> | |
</RemoveDuplicates> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
Clean Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
Clean | |
Delete all intermediate and final build outputs. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<CleanDependsOn> | |
BeforeClean; | |
CleanReferencedProjects; | |
CoreClean; | |
AfterClean | |
</CleanDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="Clean" | |
DependsOnTargets="$(CleanDependsOn)" /> | |
<!-- | |
================================================================================================== | |
BeforeClean | |
Redefine this target in your project in order to run tasks just before Clean. | |
================================================================================================== | |
--> | |
<Target Name="BeforeClean" /> | |
<!-- | |
================================================================================================== | |
AfterClean | |
Redefine this target in your project in order to run tasks just after Clean. | |
================================================================================================== | |
--> | |
<Target Name="AfterClean" /> | |
<!-- | |
================================================================================================== | |
CleanReferencedProjects | |
Call Clean target on all Referenced Projects. | |
================================================================================================== | |
--> | |
<Target | |
Name="CleanReferencedProjects"> | |
<!-- TODO --> | |
<!-- | |
When building the project directly from the command-line, clean those referenced projects that | |
exist on disk. For IDE builds and command-line .SLN builds, the solution build manager takes | |
care of this. | |
--> | |
<!--MSBuild | |
Projects="@(_MSBuildProjectReferenceExistent)" | |
Targets="Clean" | |
Condition=" '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildingSolutionFile)' != 'true' and '@(_MSBuildProjectReferenceExistent)' != '' " /--> | |
</Target> | |
<!-- | |
================================================================================================== | |
CoreClean | |
Cleans all of the compile and link outputs as well as any intermediate files generated along | |
the way. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<CoreCleanDependsOn></CoreCleanDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="CoreClean" | |
DependsOnTargets="$(CoreCleanDependsOn)"> | |
<!-- Read in list of files that were written to disk in past builds. --> | |
<ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)"> | |
<Output TaskParameter="Lines" ItemName="_CleanPriorFileWrites" /> | |
</ReadLinesFromFile> | |
<!-- Find all files in the final output directory. --> | |
<FindUnderPath Path="$(OutDir)" Files="@(_CleanPriorFileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanPriorFileWritesInOutput" /> | |
</FindUnderPath> | |
<!-- Find all files in the intermediate output directory. --> | |
<FindUnderPath Path="$(IntermediateOutputPath)" Files="@(_CleanPriorFileWrites)"> | |
<Output TaskParameter="InPath" ItemName="_CleanPriorFileWritesInIntermediate" /> | |
</FindUnderPath> | |
<!-- Delete those files. --> | |
<Delete Files="@(_CleanPriorFileWritesInOutput);@(_CleanPriorFileWritesInIntermediate)" TreatErrorsAsWarnings="true"> | |
<Output TaskParameter="DeletedFiles" ItemName="_CleanPriorFileWritesDeleted" /> | |
</Delete> | |
<!-- Create a list of everything that wasn't deleted. --> | |
<CreateItem Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanPriorFileWritesDeleted)"> | |
<Output TaskParameter="Include" ItemName="_CleanRemainingFileWritesAfterClean" /> | |
</CreateItem> | |
<!-- Remove duplicates. --> | |
<RemoveDuplicates Inputs="@(_CleanRemainingFileWritesAfterClean)"> | |
<Output TaskParameter="Filtered" ItemName="_CleanUniqueRemainingFileWrites" /> | |
</RemoveDuplicates> | |
<!-- Make sure the directory exists. --> | |
<MakeDir Directories="$(IntermediateOutputPath)" /> | |
<!-- Write new list of current files back to disk. --> | |
<WriteLinesToFile File="$(IntermediateOutputPath)$(CleanFile)" Lines="@(_CleanUniqueRemainingFileWrites)" Overwrite="true" /> | |
</Target> | |
<!-- | |
================================================================================================== | |
_CleanRecordFileWrites | |
Save the list of all files written to disk so that it can be used for "Clean" later. | |
Files written in prior builds are not removed from Clean cache. | |
================================================================================================== | |
--> | |
<Target | |
Name="_CleanRecordFileWrites" | |
DependsOnTargets="_CleanGetCurrentAndPriorFileWrites"> | |
<!-- Merge list of files from prior builds with the current build and then remove duplicates. --> | |
<RemoveDuplicates Inputs="@(_CleanPriorFileWrites);@(_CleanCurrentFileWrites)"> | |
<Output TaskParameter="Filtered" ItemName="_CleanUniqueFileWrites" /> | |
</RemoveDuplicates> | |
<!-- Make sure the directory exists. --> | |
<MakeDir Directories="$(IntermediateOutputPath)" /> | |
<!-- Write merged file list back to disk, replacing existing contents. --> | |
<WriteLinesToFile | |
File="$(IntermediateOutputPath)$(CleanFile)" | |
Lines="@(_CleanUniqueFileWrites)" | |
Overwrite="true" /> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
PostBuildEvent Targets | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
PostBuildEvent | |
Run the post-build event. This step is driven by two parameters: | |
1) $(RunPostBuildEvent) is set by the user through the IDE and can be one of four values: | |
1) OnBuildSuccess: In this case, every step of the build must succeed for the post-build | |
step to run. | |
2) <Blank>: This is the same as OnBuildSuccess. | |
3) OnOutputUpdated: In this case, the post-build step will run only if the main output was | |
actually updated. | |
4) Always: The post-build step is always run. | |
2) $(_TargetOutputTimestampBeforeCompileAndLink) and $(_TargetOutputTimestampAfterCompileAndLink) | |
are set by the _TimeStampBeforeCompileAndLink and _TimeStampAfterCompileAndLink targets. If | |
the output was actually rebuilt during this build, then the two values will be different. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<PostBuildEventDependsOn>GetTargetPath</PostBuildEventDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="PostBuildEvent" | |
Condition=" '$(PostBuildEvent)' != '' and | |
( '$(RunPostBuildEvent)' != 'OnOutputUpdated' or '$(_TargetOutputTimestampBeforeCompileAndLink)' != '$(_TargetOutputTimestampAfterCompileAndLink)' )" | |
DependsOnTargets="$(PostBuildEventDependsOn)"> | |
<ReplaceString | |
Text="$(PostBuildEvent)" | |
OldValue="!(TargetPath)" | |
NewValue="$(TargetPath)"> | |
<Output TaskParameter="Text" PropertyName="ExpandedPostBuildEvent" /> | |
</ReplaceString> | |
<ReplaceString | |
Text="$(ExpandedPostBuildEvent)" | |
OldValue="!(TargetPdbPath)" | |
NewValue="$(TargetPdbPath)"> | |
<Output TaskParameter="Text" PropertyName="ExpandedPostBuildEvent" /> | |
</ReplaceString> | |
<Exec WorkingDirectory="$(OutDir)" Command="$(ExpandedPostBuildEvent)" /> | |
</Target> | |
<!-- | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
AllProjectOutputGroups Section | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
--> | |
<!-- | |
================================================================================================== | |
AllProjectOutputGroups | |
The targets below drive output groups, which provide generic information about a | |
project's inputs (e.g., content files, compilation sources, etc.) and built outputs | |
(e.g., built EXE/DLL, PDB, XML documentation files, etc.) | |
Each target may produce two kinds of items: outputs and dependencies. Outputs are | |
items from the current project; dependencies are items that are brought into the | |
current project as a result of referencing other projects or components. | |
For both outputs and dependencies, the Include attribute | |
specifies the location of the output/dependency; it must be a full path. Any number | |
of additional attributes may be placed on an output/dependency item. | |
================================================================================================== | |
--> | |
<Target | |
Name="AllProjectOutputGroups" | |
DependsOnTargets=" | |
BuiltProjectOutputGroup; | |
DebugSymbolsProjectOutputGroup; | |
DocumentationProjectOutputGroup; | |
SatelliteDllsProjectOutputGroup; | |
SourceFilesProjectOutputGroup; | |
ContentFilesProjectOutputGroup; | |
SGenFilesOutputGroup" /> | |
<!-- | |
This is the key output for the BuiltProjectOutputGroup and is meant to be read directly from the IDE. | |
Reading an item is faster than invoking a target. | |
--> | |
<ItemGroup> | |
<BuiltProjectOutputGroupKeyOutput Include="$(TargetPath)"> | |
<IsKeyOutput>true</IsKeyOutput> | |
<FinalOutputPath>$(TargetPath)</FinalOutputPath> | |
<TargetPath>$(TargetFileName)</TargetPath> | |
</BuiltProjectOutputGroupKeyOutput> | |
</ItemGroup> | |
<!-- | |
================================================================================================== | |
BuiltProjectOutputGroup | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<BuiltProjectOutputGroupDependsOn>PrepareForBuild;AssignCultures</BuiltProjectOutputGroupDependsOn> | |
<AddAppConfigToBuildOutputs Condition="('$(AddAppConfigToBuildOutputs)' == '') and ('$(OutputType)' != 'library')">true</AddAppConfigToBuildOutputs> | |
</PropertyGroup> | |
<Target | |
Name="BuiltProjectOutputGroup" | |
Outputs="@(BuiltProjectOutputGroupOutput)" | |
DependsOnTargets="$(BuiltProjectOutputGroupDependsOn)"> | |
<!-- Don't add BuiltProjectOutputGroupKeyOutput - to avoid duplicates, we only want to get the updated list of TargetPaths from the TargetPath property below --> | |
<!-- Convert intermediate items into final items; this way we can get the full path for each item --> | |
<CreateItem Include="@(_BuiltProjectOutputGroupOutputIntermediate->'%(FullPath)')"> | |
<Output TaskParameter="Include" ItemName="BuiltProjectOutputGroupOutput" /> | |
</CreateItem> | |
<!-- Include build output(s). Different than predefined itemgroup since AssignCultures target may change it --> | |
<CreateItem | |
Include="$(TargetPath)"> | |
<Output TaskParameter="Include" ItemName="BuiltProjectOutputGroupOutput" /> | |
</CreateItem> | |
<GetCabList Database="@(BuiltProjectOutputGroupKeyOutput)" Condition=" '$(OutputType)' == 'Package' "> | |
<Output TaskParameter="CabList" ItemName="BuiltProjectOutputGroupOutput" /> | |
</GetCabList> | |
<GetLooseFileList Database="@(BuiltProjectOutputGroupKeyOutput)" Condition=" '$(OutputType)' == 'Package' "> | |
<Output TaskParameter="LooseFileList" ItemName="BuiltProjectOutputGroupOutput" /> | |
</GetLooseFileList> | |
</Target> | |
<!-- | |
================================================================================================== | |
DebugSymbolsProjectOutputGroup | |
Populates the Debug Symbols project output group. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<DebugSymbolsProjectOutputGroupDependsOn>AssignCultures</DebugSymbolsProjectOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="DebugSymbolsProjectOutputGroup" | |
Outputs="@(DebugSymbolsProjectOutputGroupOutput)" | |
DependsOnTargets="$(DebugSymbolsProjectOutputGroupDependsOn)"> | |
<!-- Include build output pdb(s). Different than predefined itemgroup since AssignCultures target may change --> | |
<CreateItem | |
Include="$(TargetPdbPath)" | |
Condition=" '$(SuppressPdbOutput)' != 'true' "> | |
<Output TaskParameter="Include" ItemName="DebugSymbolsProjectOutputGroupOutput" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
DocumentationProjectOutputGroup | |
Populates the Documentation project output group. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<DocumentationProjectOutputGroupDependsOn></DocumentationProjectOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="DocumentationProjectOutputGroup" | |
Outputs="@(DocumentationProjectOutputGroupOutput)" | |
DependsOnTargets="$(DocumentationProjectOutputGroupDependsOn)" /> | |
<!-- | |
================================================================================================== | |
SatelliteDllsProjectOutputGroup | |
Populates the Satellite Files project output group. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<SatelliteDllsProjectOutputGroupDependsOn>PrepareForBuild</SatelliteDllsProjectOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="SatelliteDllsProjectOutputGroup" | |
Outputs="@(SatelliteDllsProjectOutputGroupOutput)" | |
DependsOnTargets="$(SatelliteDllsProjectOutputGroupDependsOn)" /> | |
<!-- | |
================================================================================================== | |
SourceFilesProjectOutputGroup | |
Populates the Source Files project output group. | |
Source files are items in the project whose type is "Compile" and "EmbeddedResource". | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<SourceFilesProjectOutputGroupDependsOn>PrepareForBuild</SourceFilesProjectOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="SourceFilesProjectOutputGroup" | |
Outputs="@(SourceFilesProjectOutputGroupOutput)" | |
DependsOnTargets="$(SourceFilesProjectOutputGroupDependsOn)"> | |
<AssignTargetPath Files="@(Compile)" RootFolder="$(MSBuildProjectDirectory)"> | |
<Output TaskParameter="AssignedFiles" ItemName="_CompileWithTargetPath" /> | |
</AssignTargetPath> | |
<AssignTargetPath Files="@(EmbeddedResource)" RootFolder="$(MSBuildProjectDirectory)"> | |
<Output TaskParameter="AssignedFiles" ItemName="_EmbeddedResourceWithTargetPath" /> | |
</AssignTargetPath> | |
<!-- First we deal with Compile and EmbeddedResource --> | |
<CreateItem Include="@(_CompileWithTargetPath->'%(FullPath)');@(_EmbeddedResourceWithTargetPath->'%(FullPath)')"> | |
<Output TaskParameter="Include" ItemName="SourceFilesProjectOutputGroupOutput" /> | |
</CreateItem> | |
<!-- Include the project file --> | |
<CreateItem Include="$(MSBuildProjectFullPath)" AdditionalMetadata="TargetPath=$(ProjectFileName)"> | |
<Output TaskParameter="Include" ItemName="SourceFilesProjectOutputGroupOutput" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
ContentFilesProjectOutputGroup | |
Populates the Content Files project output group. | |
Content files are items in the project whose type is "Content". | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<ContentFilesProjectOutputGroupDependsOn>PrepareForBuild</ContentFilesProjectOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="ContentFilesProjectOutputGroup" | |
Outputs="@(ContentFilesProjectOutputGroupOutput)" | |
DependsOnTargets="$(ContentFilesProjectOutputGroupDependsOn)"> | |
<AssignTargetPath Files="@(Content)" RootFolder="$(MSBuildProjectDirectory)"> | |
<Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPath" /> | |
</AssignTargetPath> | |
<!-- Convert items into final items; this way we can get the full path for each item. --> | |
<CreateItem Include="@(ContentWithTargetPath->'%(FullPath)')"> | |
<Output TaskParameter="Include" ItemName="ContentFilesProjectOutputGroupOutput" /> | |
</CreateItem> | |
</Target> | |
<!-- | |
================================================================================================== | |
SGenFilesOutputGroup | |
Populates the GenerateSerializationAssemblies Files project output group. | |
GenerateSerializationAssemblies files are those generated by the GenerateSerializationAssemblies | |
target and task. | |
================================================================================================== | |
--> | |
<PropertyGroup> | |
<SGenFilesOutputGroupDependsOn></SGenFilesOutputGroupDependsOn> | |
</PropertyGroup> | |
<Target | |
Name="SGenFilesOutputGroup" | |
Outputs="@(SGenFilesOutputGroupOutput)" | |
DependsOnTargets="$(SGenFilesOutputGroupDependsOn)" /> | |
<!-- | |
================================================================================================== | |
GetNativeManifest & GetCopyToOutputDirectoryItems | |
Some project types expect these targets to be defined when they take a project reference. They | |
are normally defined in Microsoft.Common.targets but we don't include that targets so we define | |
the targets here. | |
================================================================================================== | |
--> | |
<Target Name="GetNativeManifest"/> | |
<Target Name="GetCopyToOutputDirectoryItems" /> | |
<!-- Extension point: Define CustomAfterWixTargets to a .targets file that you want to include after this file. --> | |
<Import Project="$(CustomAfterWixTargets)" Condition=" '$(CustomAfterWixTargets)' != '' and Exists('$(CustomAfterWixTargets)')" /> | |
<!-- MSBuildToolsVersion is set for MSBuild 3.5 and later, which is a requirement for lux.targets. --> | |
<Import Project="$(LuxTargetsPath)" Condition=" '$(MSBuildToolsVersion)' != '' and '$(LuxTargetsPath)' != '' and Exists('$(LuxTargetsPath)')" /> | |
</Project> |