| 1 | <?xml version="1.0" encoding="utf-8"?> |
| 2 | <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> |
| 3 | |
| 4 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> |
| 5 | <PropertyGroup> |
| 6 | <WixTargetsImported>true</WixTargetsImported> |
| 7 | </PropertyGroup> |
| 8 | |
| 9 | <Import Project="wix.props" Condition=" '$(WixPropsImported)' != 'true' " /> |
| 10 | |
| 11 | <ImportGroup> |
| 12 | <Import Project="$(MSBuildUserExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportBefore\*" Condition="'$(ImportUserLocationsByWildcardBeforeWixToolsetTargets)' != 'false' and Exists('$(MSBuildUserExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportBefore')" /> |
| 13 | <Import Project="$(MSBuildExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportBefore\*" Condition="'$(ImportByWildcardBeforeWixToolsetTargets)' != 'false' and Exists('$(MSBuildExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportBefore')" /> |
| 14 | </ImportGroup> |
| 15 | |
| 16 | <!-- |
| 17 | *********************************************************************************************** |
| 18 | *********************************************************************************************** |
| 19 | Extension Points |
| 20 | *********************************************************************************************** |
| 21 | *********************************************************************************************** |
| 22 | --> |
| 23 | |
| 24 | <!-- Allow a user-customized targets files to be used as part of the build. --> |
| 25 | <Import Project="$(CustomBeforeWixTargets)" Condition=" '$(CustomBeforeWixTargets)' != '' and Exists('$(CustomBeforeWixTargets)')" /> |
| 26 | |
| 27 | <!-- These properties can be overridden to support non-default installations. --> |
| 28 | <PropertyGroup> |
| 29 | <WixBinDir Condition=" '$(WixBinDir)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">$(MSBuildThisFileDirectory)net6.0\</WixBinDir> |
| 30 | <WixBinDir Condition=" '$(WixBinDir)' == '' ">$(MSBuildThisFileDirectory)net472\</WixBinDir> |
| 31 | <WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(WixBinDir)WixToolset.BuildTasks.dll</WixTasksPath> |
| 32 | </PropertyGroup> |
| 33 | |
| 34 | <ItemGroup Condition=" '$(EnableDefaultItems)' == 'true' "> |
| 35 | <Compile Include="**/*.wxs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" Condition=" '$(EnableDefaultCompileItems)' == 'true' " /> |
| 36 | <EmbeddedResource Include="**/*.wxl" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" Condition=" '$(EnableDefaultEmbeddedResourceItems)' == 'true' " /> |
| 37 | </ItemGroup> |
| 38 | |
| 39 | <ItemGroup> |
| 40 | <AvailableItemName Include="BindPath;BindVariable;WixLibrary;WixExtension" /> |
| 41 | </ItemGroup> |
| 42 | |
| 43 | <UsingTask TaskName="CreateItemAvoidingInference" AssemblyFile="$(WixTasksPath)" /> |
| 44 | <UsingTask TaskName="UpdateProjectReferenceMetadata" AssemblyFile="$(WixTasksPath)" /> |
| 45 | <UsingTask TaskName="CreateProjectReferenceDefineConstantsAndBindPaths" AssemblyFile="$(WixTasksPath)" /> |
| 46 | <UsingTask TaskName="WixAssignCulture" AssemblyFile="$(WixTasksPath)" /> |
| 47 | <UsingTask TaskName="ReadTracking" AssemblyFile="$(WixTasksPath)" /> |
| 48 | <UsingTask TaskName="ResolveWixReferences" AssemblyFile="$(WixTasksPath)" /> |
| 49 | <UsingTask TaskName="WixBuild" AssemblyFile="$(WixTasksPath)" /> |
| 50 | <UsingTask TaskName="WindowsInstallerValidation" AssemblyFile="$(WixTasksPath)" /> |
| 51 | |
| 52 | <!-- |
| 53 | *********************************************************************************************** |
| 54 | *********************************************************************************************** |
| 55 | Declarations for Microsoft.Common.targets |
| 56 | *********************************************************************************************** |
| 57 | *********************************************************************************************** |
| 58 | --> |
| 59 | |
| 60 | <PropertyGroup> |
| 61 | <DefaultProjectTypeGuid Condition=" '$(DefaultProjectTypeGuid)' == '' ">{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}</DefaultProjectTypeGuid> |
| 62 | <DefaultLanguageSourceExtension>.wxs</DefaultLanguageSourceExtension> |
| 63 | <Language>wix</Language> |
| 64 | <TargetRuntime>wix</TargetRuntime> |
| 65 | |
| 66 | <!-- Ensure BaseOutputPath for Microsoft.Common.targets --> |
| 67 | <BaseOutputPath Condition="'$(BaseOutputPath)' == ''">bin\</BaseOutputPath> |
| 68 | <BaseOutputPath Condition="!HasTrailingSlash('$(BaseOutputPath)')">$(BaseOutputPath)\</BaseOutputPath> |
| 69 | |
| 70 | <!-- Use OutputName to set the AssemblyName for Microsoft.Common.targets --> |
| 71 | <OutputName Condition=" '$(OutputName)'=='' ">$(MSBuildProjectName)</OutputName> |
| 72 | <AssemblyName>$(OutputName)</AssemblyName> |
| 73 | |
| 74 | <!-- Default OutputType to a known WiX Toolset type. --> |
| 75 | <OutputType Condition=" '$(OutputType)' == '' ">Package</OutputType> |
| 76 | |
| 77 | <DebugType Condition=" '$(SuppressPdbOutput)' == 'true' ">none</DebugType> |
| 78 | <DebugType Condition=" '$(DebugType)' == '' ">full</DebugType> |
| 79 | </PropertyGroup> |
| 80 | |
| 81 | <PropertyGroup> |
| 82 | <_VCLibCurrentVersion>14.0</_VCLibCurrentVersion> |
| 83 | </PropertyGroup> |
| 84 | |
| 85 | <!-- |
| 86 | IDE Macros available from both integrated builds and from command line builds. |
| 87 | The following properties are 'macros' that are available via IDE for pre and post build steps. |
| 88 | All of them should be added to WixBuildMacroCollection to ensure that they are shown in the UI. |
| 89 | --> |
| 90 | <PropertyGroup Condition=" '$(TargetExt)' == '' "> |
| 91 | <TargetExt Condition=" '$(OutputType)' == 'Package' ">.msi</TargetExt> |
| 92 | <TargetExt Condition=" '$(OutputType)' == 'Module' ">.msm</TargetExt> |
| 93 | <TargetExt Condition=" '$(OutputType)' == 'Patch' ">.msp</TargetExt> |
| 94 | <TargetExt Condition=" '$(OutputType)' == 'PatchCreation' ">.pcp</TargetExt> |
| 95 | <TargetExt Condition=" '$(OutputType)' == 'Library' ">.wixlib</TargetExt> |
| 96 | <TargetExt Condition=" '$(OutputType)' == 'Bundle' ">.exe</TargetExt> |
| 97 | <TargetExt Condition=" '$(OutputType)' == 'IntermediatePostLink' ">.wixipl</TargetExt> |
| 98 | </PropertyGroup> |
| 99 | |
| 100 | <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" /> |
| 101 | |
| 102 | <!-- |
| 103 | This will override some targets that get defined in Microsoft.Common just like Microsoft.NET.DisableStandardFrameworkResolution.targets |
| 104 | so this needs to be imported after |
| 105 | --> |
| 106 | <Target Name="GetReferenceAssemblyPaths" /> |
| 107 | <Target Name="GetFrameworkPaths" /> |
| 108 | <PropertyGroup> |
| 109 | <_TargetFrameworkDirectories /> |
| 110 | <FrameworkPathOverride /> |
| 111 | <TargetFrameworkDirectory /> |
| 112 | <NoStdLib>true</NoStdLib> |
| 113 | </PropertyGroup> |
| 114 | <!-- end Microsoft.NET.DisableStandardFrameworkResolution.targets --> |
| 115 | |
| 116 | <PropertyGroup> |
| 117 | <!-- We don't target any frameworks, so clear what the Microsoft.Common.targets set --> |
| 118 | <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> |
| 119 | </PropertyGroup> |
| 120 | |
| 121 | <ItemDefinitionGroup> |
| 122 | <!-- Customize project references to not attempt assembly reference resolution. --> |
| 123 | <ProjectReference> |
| 124 | <Private>false</Private> |
| 125 | <ReferenceOutputAssembly>false</ReferenceOutputAssembly> |
| 126 | <SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties> |
| 127 | <OutputItemType>_WixResolvedProjectReference</OutputItemType> |
| 128 | </ProjectReference> |
| 129 | |
| 130 | <!-- By default do not copy none items to output. --> |
| 131 | <None> |
| 132 | <CopyToOutputDirectory>Never</CopyToOutputDirectory> |
| 133 | </None> |
| 134 | </ItemDefinitionGroup> |
| 135 | |
| 136 | <PropertyGroup> |
| 137 | <!-- |
| 138 | Only Package, Module and Bundle output types create .wixpdbs, so reset the flag indicating symbols will be produced outside of those output types. |
| 139 | --> |
| 140 | <_DebugSymbolsProduced Condition=" '$(OutputType)' != 'Package' and '$(OutputType)' != 'Module' and '$(OutputType)' != 'Patch' and '$(OutputType)' != 'Bundle' ">false</_DebugSymbolsProduced> |
| 141 | </PropertyGroup> |
| 142 | |
| 143 | <PropertyGroup> |
| 144 | <!-- Default pdb output path to the intermediate output directory --> |
| 145 | <PdbOutputDir Condition=" '$(PdbOutputDir)'=='' ">$(TargetDir)</PdbOutputDir> |
| 146 | <TargetPdbDir Condition=" '$(PdbOutputDir)'!='' ">$([MSBuild]::NormalizeDirectory($(MSBuildProjectDirectory), $(PdbOutputDir)))</TargetPdbDir> |
| 147 | <TargetPdbFileName Condition=" '$(TargetPdbFileName)' == '' ">$(TargetName).wixpdb</TargetPdbFileName> |
| 148 | <TargetPdbPath Condition=" '$(TargetPdbPath)' == '' ">$(TargetPdbDir)$(TargetPdbFileName)</TargetPdbPath> |
| 149 | </PropertyGroup> |
| 150 | |
| 151 | <PropertyGroup> |
| 152 | <BindTrackingFilePrefix Condition=" '$(BindTrackingFilePrefix)' == '' ">$(MSBuildProjectFile).BindTracking</BindTrackingFilePrefix> |
| 153 | <BindTrackingFileExtension Condition=" '$(BindTrackingFileExtension)' == '' ">.txt</BindTrackingFileExtension> |
| 154 | </PropertyGroup> |
| 155 | |
| 156 | <!-- |
| 157 | *********************************************************************************************** |
| 158 | *********************************************************************************************** |
| 159 | Property Declarations |
| 160 | *********************************************************************************************** |
| 161 | *********************************************************************************************** |
| 162 | --> |
| 163 | |
| 164 | <!-- |
| 165 | *********************************************************************************************** |
| 166 | *********************************************************************************************** |
| 167 | Default Property Declarations |
| 168 | *********************************************************************************************** |
| 169 | *********************************************************************************************** |
| 170 | --> |
| 171 | |
| 172 | <!-- Default Compiler properties. --> |
| 173 | <PropertyGroup> |
| 174 | <InstallerPlatform Condition=" '$(InstallerPlatform)' == '' and ('$(Platform)' == '' or '$(Platform)' == 'Win32' or '$(Platform)' == 'AnyCPU' or '$(Platform)' == 'Any CPU') ">x86</InstallerPlatform> |
| 175 | <InstallerPlatform Condition=" '$(InstallerPlatform)' == '' ">$(Platform)</InstallerPlatform> |
| 176 | </PropertyGroup> |
| 177 | |
| 178 | <!-- Convert legacy BindInputPaths and LinkerBindInputPaths (in the project or passed in via the command line) into the new BindPath items --> |
| 179 | <ItemGroup> |
| 180 | <BindInputPaths Include="$(BindInputPaths)" Condition=" '$(BindInputPaths)' != '' " /> |
| 181 | <LinkerBindInputPaths Include="$(LinkerBindInputPaths)" Condition=" '$(LinkerBindInputPaths)' != '' " /> |
| 182 | <BindPath Include="$(BindPath)" Condition=" '$(BindPath)' != '' " /> |
| 183 | <BindPath Include="@(BindInputPaths);@(LinkerBindInputPaths)" /> |
| 184 | <BindVariable Include="$(WixVariables)" Condition=" '$(WixVariables)' != '' " /> |
| 185 | </ItemGroup> |
| 186 | |
| 187 | <!-- |
| 188 | *********************************************************************************************** |
| 189 | *********************************************************************************************** |
| 190 | Resolve References Section |
| 191 | *********************************************************************************************** |
| 192 | *********************************************************************************************** |
| 193 | --> |
| 194 | |
| 195 | <!-- |
| 196 | ================================================================================================ |
| 197 | ResolveReferences - OVERRIDE DependsOn |
| 198 | |
| 199 | ================================================================================================ |
| 200 | --> |
| 201 | <PropertyGroup> |
| 202 | <ResolveReferencesDependsOn> |
| 203 | BeforeResolveReferences; |
| 204 | AssignProjectConfiguration; |
| 205 | _ValidateProjectAssetsFile; |
| 206 | ResolveProjectReferences; |
| 207 | FindInvalidProjectReferences; |
| 208 | ResolveNativeProjectReferences; |
| 209 | _ConvertResolvedProjectReferencesIntoWixConstructs; |
| 210 | ResolveWixLibraryReferences; |
| 211 | ResolveWixExtensionReferences; |
| 212 | _CreateProjectDefineConstants; |
| 213 | AfterResolveReferences |
| 214 | </ResolveReferencesDependsOn> |
| 215 | </PropertyGroup> |
| 216 | |
| 217 | <!-- |
| 218 | ================================================================================================ |
| 219 | _ValidateProjectAssetsFile |
| 220 | |
| 221 | Ensures that the project assets file exists which indicates restore was completed. Restore is |
| 222 | required if there are any PackageReferences in the project. |
| 223 | |
| 224 | [IN] |
| 225 | @(PackageReference) - Package references, if any. |
| 226 | $(ProjectAssetsFile) - Project assets file that should be created during restore. |
| 227 | ================================================================================================ |
| 228 | --> |
| 229 | <Target |
| 230 | Name="_ValidateProjectAssetsFile" |
| 231 | Condition=" '@(PackageReference)' != '' "> |
| 232 | |
| 233 | <Error Text="The $(ProjectAssetsFile) file does not exist. Restore the project before trying to build again. Restore and build with "MSBuild -Restore" or "dotnet build"." |
| 234 | Condition="!Exists('$(ProjectAssetsFile)')" /> |
| 235 | |
| 236 | </Target> |
| 237 | |
| 238 | <!-- |
| 239 | ================================================================================================ |
| 240 | _WixUpdateProjectReferenceMetadata |
| 241 | |
| 242 | Updates project references so they build correctly when referenced by .wixproj. |
| 243 | |
| 244 | [IN] |
| 245 | @(_MSBuildProjectReferenceExistent) - References to projects that exist. |
| 246 | |
| 247 | [OUT] |
| 248 | @(_MSBuildProjectReferenceExistent) - Project references updated as necessary. |
| 249 | ================================================================================================ |
| 250 | --> |
| 251 | <Target |
| 252 | Name="_WixUpdateProjectReferenceMetadata" |
| 253 | AfterTargets="_SplitProjectReferencesByFileExistence" |
| 254 | Condition=" '@(_MSBuildProjectReferenceExistent)' != '' "> |
| 255 | |
| 256 | <UpdateProjectReferenceMetadata |
| 257 | ProjectReferences="@(_MSBuildProjectReferenceExistent)" |
| 258 | IntermediateFolder="$(IntermediateOutputPath)"> |
| 259 | <Output TaskParameter="UpdatedProjectReferences" ItemName="_WixUpdatedProjectReferences" /> |
| 260 | </UpdateProjectReferenceMetadata> |
| 261 | |
| 262 | <ItemGroup> |
| 263 | <_MSBuildProjectReferenceExistent Remove='@(_WixUpdatedProjectReferences)' /> |
| 264 | <_MSBuildProjectReferenceExistent Include='@(_WixUpdatedProjectReferences)' /> |
| 265 | </ItemGroup> |
| 266 | </Target> |
| 267 | |
| 268 | <!-- |
| 269 | ================================================================================================ |
| 270 | ResolveNativeProjectReferences |
| 271 | |
| 272 | VC project references must build GetNativeTargetPath because neither GetTargetPath nor |
| 273 | the return of the default build target return the output for a native .vcxproj. |
| 274 | |
| 275 | [IN] |
| 276 | @(_MSBuildProjectReferenceExistent) - References to projects that exist. |
| 277 | |
| 278 | [OUT] |
| 279 | @(_WixResolvedProjectReference) - Target paths from .vcxproj outputs added. |
| 280 | ================================================================================================ |
| 281 | --> |
| 282 | <Target |
| 283 | Name="ResolveNativeProjectReferences" |
| 284 | Condition=" '@(_MSBuildProjectReferenceExistent)' != '' "> |
| 285 | |
| 286 | <MSBuild |
| 287 | Projects="@(_MSBuildProjectReferenceExistent)" |
| 288 | Targets="GetNativeTargetPath" |
| 289 | Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);%(_MSBuildProjectReferenceExistent.SetPlatform)" |
| 290 | Condition=" '@(ProjectReferenceWithConfiguration)' != '' and '%(_MSBuildProjectReferenceExistent.Extension)' == '.vcxproj' "> |
| 291 | |
| 292 | <Output TaskParameter="TargetOutputs" ItemName="_WixResolvedProjectReference" /> |
| 293 | </MSBuild> |
| 294 | </Target> |
| 295 | |
| 296 | <!-- |
| 297 | ================================================================================================ |
| 298 | _ConvertResolvedProjectReferencesIntoWixConstructs |
| 299 | |
| 300 | Converts _WixResolvedProjectReference (which are the outputs of the ProjectReferences that |
| 301 | normally would be passed through ResolveAssemblyReferences then be passed to the C# compiler |
| 302 | as references) into the appropriate WiX constructs. For example, references to .wixlibs are |
| 303 | converted into WixLibrary items. In the end, _WixResolvedProjectReference is emptied to |
| 304 | prevent ResolveAssemblyReferences and other non-sensical targets (from a WiX point of view) |
| 305 | from doing work. |
| 306 | |
| 307 | [IN] |
| 308 | @(_WixResolvedProjectReference) - Resolved project references. |
| 309 | $(VSProjectConfigurations) - map of project names to configurations, provided by VS when building in the IDE. |
| 310 | |
| 311 | [OUT] |
| 312 | $(ProjectReferenceDefineConstants) - Define constants from project references. |
| 313 | @(BindPath) - Bind paths from project references. |
| 314 | @(WixLibrary) - Target paths from .vcxproj outputs added. |
| 315 | @(_WixReferencedProjectOutputs) - Copy of _WixResolvedProjectReference for use in up-to-date checks. |
| 316 | @(_WixResolvedProjectReference) - All resolved reference paths emptied. |
| 317 | ================================================================================================ |
| 318 | --> |
| 319 | <PropertyGroup> |
| 320 | <_ConvertResolvedProjectReferencesIntoWixConstructs></_ConvertResolvedProjectReferencesIntoWixConstructs> |
| 321 | </PropertyGroup> |
| 322 | <Target |
| 323 | Name="_ConvertResolvedProjectReferencesIntoWixConstructs" |
| 324 | DependsOnTargets="$(_ConvertResolvedProjectReferencesIntoWixConstructs)" |
| 325 | Condition=" '@(_WixResolvedProjectReference)' != '' "> |
| 326 | |
| 327 | <!-- Save all the project reference outputs before we start removing --> |
| 328 | <ItemGroup> |
| 329 | <_WixReferencedProjectOutputs Include="@(_WixResolvedProjectReference)" /> |
| 330 | </ItemGroup> |
| 331 | |
| 332 | <ItemGroup> |
| 333 | <WixLibrary Include="@(_WixResolvedProjectReference)" Condition=" '%(Extension)' == '.wixlib' " /> |
| 334 | </ItemGroup> |
| 335 | |
| 336 | <!-- Convert resolved project references into compiler defines and named and unamed bind paths --> |
| 337 | <CreateProjectReferenceDefineConstantsAndBindPaths |
| 338 | ResolvedProjectReferences="@(_WixResolvedProjectReference)" |
| 339 | ProjectConfigurations="$(VSProjectConfigurations)"> |
| 340 | <Output TaskParameter="BindPaths" ItemName="BindPath" /> |
| 341 | <Output TaskParameter="DefineConstants" PropertyName="ProjectReferenceDefineConstants" /> |
| 342 | </CreateProjectReferenceDefineConstantsAndBindPaths> |
| 343 | |
| 344 | <!-- |
| 345 | Empty the resolved project references to prevent ResolveAssemblyReferences and other C# specific |
| 346 | behavior from kicking in |
| 347 | --> |
| 348 | <ItemGroup> |
| 349 | <_WixResolvedProjectReference Remove="@(_WixResolvedProjectReference)" /> |
| 350 | </ItemGroup> |
| 351 | </Target> |
| 352 | |
| 353 | <!-- |
| 354 | ================================================================================================ |
| 355 | ResolveWixLibraryReferences |
| 356 | |
| 357 | Resolve the library references to full paths by searching using $(WixLibrarySearchPaths) and |
| 358 | including the outputs from any ProjectReferences that output .wixlib. |
| 359 | |
| 360 | By default the WixLibrarySearchPaths property is set to find libraries in the following order: |
| 361 | |
| 362 | (1) $(ReferencePaths) - the reference paths property. |
| 363 | (2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}. |
| 364 | (3) Treat the reference's Include as if it were a real file name. |
| 365 | |
| 366 | [IN] |
| 367 | @(WixLibrary) - the list of .wixlib files. |
| 368 | $(WixLibrarySearchPaths) - optional search paths used to find .wixlibs. |
| 369 | |
| 370 | [OUT] |
| 371 | @(_ResolvedWixLibraryPaths) - Item group with full paths to libraries that were found. |
| 372 | @(_UnresolvedWixLibraryPaths) - Item group with full paths to libraries that were not found. |
| 373 | ================================================================================================ |
| 374 | --> |
| 375 | <PropertyGroup> |
| 376 | <ResolveWixLibraryReferencesDependsOn></ResolveWixLibraryReferencesDependsOn> |
| 377 | </PropertyGroup> |
| 378 | <Target |
| 379 | Name="ResolveWixLibraryReferences" |
| 380 | DependsOnTargets="$(ResolveWixLibraryReferencesDependsOn)" |
| 381 | Condition=" '@(WixLibrary)' != ''"> |
| 382 | |
| 383 | <PropertyGroup> |
| 384 | <WixLibrarySearchPaths Condition=" '$(WixLibrarySearchPaths)' == '' ">$(ReferencePaths);{HintPathFromItem};{RawFileName}</WixLibrarySearchPaths> |
| 385 | </PropertyGroup> |
| 386 | |
| 387 | <ResolveWixReferences |
| 388 | WixReferences="@(WixLibrary)" |
| 389 | SearchPaths="$(WixLibrarySearchPaths)" |
| 390 | SearchFilenameExtensions=".wixlib"> |
| 391 | <Output TaskParameter="ResolvedWixReferences" ItemName="_ResolvedWixLibraryPaths" /> |
| 392 | <Output TaskParameter="UnresolvedWixReferences" ItemName="_UnresolvedWixLibraryPaths" /> |
| 393 | </ResolveWixReferences> |
| 394 | </Target> |
| 395 | |
| 396 | <!-- |
| 397 | ================================================================================================ |
| 398 | ResolveWixExtensionReferences |
| 399 | |
| 400 | Resolves WiX extension references to full paths. |
| 401 | |
| 402 | By default the WixExtensionSearchPaths property is set to find extensions in the following order: |
| 403 | |
| 404 | (1) $(ReferencePaths) - the reference paths property. |
| 405 | (2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}. |
| 406 | (3) Treat the reference's Include as if it were a real file name. |
| 407 | |
| 408 | [IN] |
| 409 | @(WixExtension) - WixExtension item group |
| 410 | |
| 411 | [OUT] |
| 412 | @(_ResolvedWixExtensionPaths) - Item group with full paths to extensions |
| 413 | ================================================================================================ |
| 414 | --> |
| 415 | <PropertyGroup> |
| 416 | <ResolveWixExtensionReferencesDependsOn></ResolveWixExtensionReferencesDependsOn> |
| 417 | </PropertyGroup> |
| 418 | <Target |
| 419 | Name="ResolveWixExtensionReferences" |
| 420 | DependsOnTargets="$(ResolveWixExtensionReferencesDependsOn)" |
| 421 | Condition=" '@(WixExtension)' != ''"> |
| 422 | |
| 423 | <PropertyGroup> |
| 424 | <WixExtensionSearchPaths Condition=" '$(WixExtensionSearchPaths)' == '' ">$(ReferencePaths);{HintPathFromItem};{RawFileName}</WixExtensionSearchPaths> |
| 425 | </PropertyGroup> |
| 426 | |
| 427 | <ResolveWixReferences |
| 428 | WixReferences="@(WixExtension)" |
| 429 | SearchPaths="$(WixExtensionSearchPaths)" |
| 430 | SearchFilenameExtensions=".wixext.dll"> |
| 431 | <Output TaskParameter="ResolvedWixReferences" ItemName="_ResolvedWixExtensionPaths" /> |
| 432 | <Output TaskParameter="UnresolvedWixReferences" ItemName="_UnresolvedWixExtensionPaths" /> |
| 433 | </ResolveWixReferences> |
| 434 | </Target> |
| 435 | |
| 436 | <!-- |
| 437 | *********************************************************************************************** |
| 438 | *********************************************************************************************** |
| 439 | PrepareResources Section |
| 440 | *********************************************************************************************** |
| 441 | *********************************************************************************************** |
| 442 | --> |
| 443 | |
| 444 | <!-- |
| 445 | ================================================================================================ |
| 446 | AssignTargetPaths - OVERRIDE Target |
| 447 | |
| 448 | Determines the final list of culture groups to build based on either the Cultures property or |
| 449 | those specified in .wxl files. |
| 450 | |
| 451 | Culture groups specified in the Cultures property must be specified as a semi-colon |
| 452 | delimited list of groups, with comma-delimited cultures within a group. |
| 453 | For example: |
| 454 | <Cultures>en-US,en;en-GB,en</Cultures> |
| 455 | This will build 2 targets, outputing to en-US and en-GB sub-folders. Light will first look |
| 456 | for strings in the first culture (en-US or en-GB) then the second (en). |
| 457 | |
| 458 | Cultures of .wxl files will be used when the Culture property is not set. The culture of a |
| 459 | .wxl file is determined by the Culture attribute in the WixLocalization element in the file |
| 460 | |
| 461 | Sets the OutputFolder metadata on each culture group. In most cases this is the same as the |
| 462 | first culture in the culture group. When the Culture's property is unspecified and no .wxl |
| 463 | files are provided this is the same as the output directory. When the Culture's property |
| 464 | specifies a single culture group and no .wxl files are provided this is the same as the output |
| 465 | directory. |
| 466 | |
| 467 | Updates the TargetPath and TargetPdbPath properties to be used in subsequent targets. |
| 468 | |
| 469 | [IN] |
| 470 | @(EmbeddedResource) - The list of wxl files to use for localization. |
| 471 | $(Cultures) - The list of culture groups to build. |
| 472 | |
| 473 | [OUT] |
| 474 | @(CultureGroup) - The list of culture group strings with OutputFolder metadata |
| 475 | $(TargetPath) - Property list of target link output MSIs/MSMs |
| 476 | $(TargetPdbPath) - Property list of target output pdbs |
| 477 | ================================================================================================ |
| 478 | --> |
| 479 | <Target |
| 480 | Name="AssignTargetPaths" |
| 481 | Condition=" '$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module' "> |
| 482 | |
| 483 | <WixAssignCulture Cultures="$(Cultures)" Files="@(EmbeddedResource)"> |
| 484 | <Output TaskParameter="CultureGroups" ItemName="CultureGroup" /> |
| 485 | </WixAssignCulture> |
| 486 | |
| 487 | <!-- Expand the culture groups then put them back into the appropriate property --> |
| 488 | <ItemGroup> |
| 489 | <_CulturedTargetPath Include="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetFileName)" /> |
| 490 | <_CulturedTargetPdbPath Include="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" /> |
| 491 | </ItemGroup> |
| 492 | |
| 493 | <PropertyGroup> |
| 494 | <TargetPath>@(_CulturedTargetPath)</TargetPath> |
| 495 | <TargetPdbPath>@(_CulturedTargetPdbPath)</TargetPdbPath> |
| 496 | |
| 497 | <!-- Update bind tracking filename prefix so cultures appended to the filename will be separated by a "-" --> |
| 498 | <BindTrackingFilePrefix>$(BindTrackingFilePrefix)-</BindTrackingFilePrefix> |
| 499 | </PropertyGroup> |
| 500 | </Target> |
| 501 | |
| 502 | <!-- |
| 503 | ================================================================================================ |
| 504 | CreateManifestResourceNames |
| 505 | |
| 506 | Converts the EmbeddedResource into _WixLocalizationFile to disable satellite assembly |
| 507 | generation in common targets. |
| 508 | ================================================================================================ |
| 509 | --> |
| 510 | <Target |
| 511 | Name="CreateManifestResourceNames" |
| 512 | Condition=" '@(EmbeddedResource)' != '' "> |
| 513 | |
| 514 | <ItemGroup> |
| 515 | <_WixLocalizationFile Include="@(EmbeddedResource)"> |
| 516 | <Type>wxl</Type> |
| 517 | </_WixLocalizationFile> |
| 518 | |
| 519 | <EmbeddedResource Remove="@(EmbeddedResource)" /> |
| 520 | </ItemGroup> |
| 521 | </Target> |
| 522 | |
| 523 | <!-- |
| 524 | ================================================================================================ |
| 525 | GetTargetPath - OVERRIDE DependsOn |
| 526 | |
| 527 | This stand-alone target returns the name of the build package (i.e. MSI, MSM) that would be |
| 528 | produced if we built this project. |
| 529 | ================================================================================================ |
| 530 | --> |
| 531 | <PropertyGroup> |
| 532 | <GetTargetPathDependsOn>$(GetTargetPathDependsOn);AssignTargetPaths</GetTargetPathDependsOn> |
| 533 | </PropertyGroup> |
| 534 | |
| 535 | <!-- |
| 536 | *********************************************************************************************** |
| 537 | *********************************************************************************************** |
| 538 | Compile Section |
| 539 | *********************************************************************************************** |
| 540 | *********************************************************************************************** |
| 541 | --> |
| 542 | |
| 543 | <!-- |
| 544 | ================================================================================================ |
| 545 | CoreCompile |
| 546 | |
| 547 | ================================================================================================ |
| 548 | --> |
| 549 | <PropertyGroup> |
| 550 | <CompileDependsOn> |
| 551 | $(CompileDependsOn); |
| 552 | WindowsInstallerValidation |
| 553 | </CompileDependsOn> |
| 554 | <CoreCompileDependsOn> |
| 555 | AssignTargetPaths; |
| 556 | CreateManifestResourceNames; |
| 557 | ReadPreviousBindInputsAndBuiltOutputs; |
| 558 | _CreateProjectDefineConstants; |
| 559 | $(CoreCompileDependsOn) |
| 560 | </CoreCompileDependsOn> |
| 561 | </PropertyGroup> |
| 562 | <Target |
| 563 | Name="CoreCompile" |
| 564 | Inputs="$(MSBuildAllProjects); |
| 565 | @(Compile); |
| 566 | @(Content); |
| 567 | @(_WixLocalizationFile); |
| 568 | @(_WixReferencedProjectOutputs); |
| 569 | @(_ResolvedWixLibraryPaths); |
| 570 | @(_ResolvedWixExtensionPaths); |
| 571 | @(_BindInputs)" |
| 572 | Outputs="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension);@(_BindBuiltOutputs)" |
| 573 | DependsOnTargets="$(CoreCompileDependsOn)" |
| 574 | Condition=" '@(Compile)' != '' "> |
| 575 | |
| 576 | <PropertyGroup> |
| 577 | <CabinetCachePath Condition=" '$(CabinetCachePath)'=='' and '$(ReuseCabinetCache)'=='true' ">$(IntermediateOutputPath)cabcache\</CabinetCachePath> |
| 578 | <_WixBuildCabinetCachePath Condition=" '$(CabinetCachePath)'!='' ">$([MSBuild]::NormalizeDirectory($(CabinetCachePath), %(CultureGroup.OutputFolder)))</_WixBuildCabinetCachePath> |
| 579 | </PropertyGroup> |
| 580 | |
| 581 | <Warning Text="@(UnsupportedWixExtension->'%(Identity)') does not have support for WiX Toolset v$(WixToolsetVersion)." |
| 582 | Condition=" '@(UnsupportedWixExtension)' != '' "/> |
| 583 | |
| 584 | <WixBuild |
| 585 | SourceFiles="@(Compile)" |
| 586 | LibraryFiles="@(_ResolvedWixLibraryPaths)" |
| 587 | LocalizationFiles="@(_WixLocalizationFile)" |
| 588 | |
| 589 | Cultures="%(CultureGroup.Identity)" |
| 590 | |
| 591 | Extensions="@(_ResolvedWixExtensionPaths)" |
| 592 | |
| 593 | IntermediateDirectory="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)" |
| 594 | |
| 595 | OutputFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)" |
| 596 | OutputType="$(OutputType)" |
| 597 | PdbFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" |
| 598 | PdbType="$(DebugType)" |
| 599 | |
| 600 | AdditionalOptions="$(CompilerAdditionalOptions) $(LinkerAdditionalOptions)" |
| 601 | DefineConstants="$(DefineConstants);$(SolutionDefineConstants);$(ProjectDefineConstants);$(ProjectReferenceDefineConstants)" |
| 602 | IncludeSearchPaths="$(IncludeSearchPaths)" |
| 603 | InstallerPlatform="$(InstallerPlatform)" |
| 604 | NoLogo="true" |
| 605 | Pedantic="$(Pedantic)" |
| 606 | |
| 607 | BindPaths="@(BindPath)" |
| 608 | BindVariables="@(BindVariable)" |
| 609 | BindFiles="$(BindFiles)" |
| 610 | BindTrackingFile="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)" |
| 611 | |
| 612 | CabinetCachePath="$(_WixBuildCabinetCachePath)" |
| 613 | CabinetCreationThreadCount="$(CabinetCreationThreadCount)" |
| 614 | DefaultCompressionLevel="$(DefaultCompressionLevel)" |
| 615 | |
| 616 | SuppressAllWarnings="$(SuppressAllWarnings)" |
| 617 | SuppressSpecificWarnings="$(SuppressSpecificWarnings)" |
| 618 | TreatWarningsAsErrors="$(TreatWarningsAsErrors)" |
| 619 | TreatSpecificWarningsAsErrors="$(TreatSpecificWarningsAsErrors)" |
| 620 | VerboseOutput="$(VerboseOutput)" |
| 621 | |
| 622 | ToolExe="$(WixToolExe)" |
| 623 | ToolPath="$(WixToolDir)" |
| 624 | YieldDuringToolExecution="true"> |
| 625 | <Output TaskParameter="ExitCode" PropertyName="_WixBuildExitCode" /> |
| 626 | </WixBuild> |
| 627 | |
| 628 | <ItemGroup> |
| 629 | <_WixBuildOutputFile Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)" /> |
| 630 | </ItemGroup> |
| 631 | </Target> |
| 632 | |
| 633 | <Target |
| 634 | Name="WindowsInstallerValidation" |
| 635 | DependsOnTargets="CoreCompile" |
| 636 | Condition=" '$(_WixBuildExitCode)' != '' and '$(SuppressValidation)' != 'true' and ('$(OutputType)' == 'Package' or '$(OutputType)' == 'Module') "> |
| 637 | <WindowsInstallerValidation |
| 638 | DatabaseFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)" |
| 639 | WixpdbFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" |
| 640 | IntermediateDirectory="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)" |
| 641 | Ices="$(Ices)" |
| 642 | SuppressIces="$(SuppressIces)" |
| 643 | CubeFiles="$(AdditionalCub)" |
| 644 | |
| 645 | AdditionalOptions="$(ValidationAdditionalOptions)" |
| 646 | |
| 647 | NoLogo="true" |
| 648 | SuppressAllWarnings="$(SuppressAllWarnings)" |
| 649 | SuppressSpecificWarnings="$(SuppressSpecificWarnings)" |
| 650 | TreatWarningsAsErrors="$(TreatWarningsAsErrors)" |
| 651 | TreatSpecificWarningsAsErrors="$(TreatSpecificWarningsAsErrors)" |
| 652 | VerboseOutput="$(VerboseOutput)" |
| 653 | YieldDuringToolExecution="true" /> |
| 654 | </Target> |
| 655 | |
| 656 | <!-- |
| 657 | ================================================================================================ |
| 658 | _CreateProjectDefineConstants |
| 659 | |
| 660 | Adds properties as define constants passed into the compiler. |
| 661 | ================================================================================================ |
| 662 | --> |
| 663 | <PropertyGroup> |
| 664 | <_CreateProjectDefineConstantsDependsOn></_CreateProjectDefineConstantsDependsOn> |
| 665 | </PropertyGroup> |
| 666 | <Target |
| 667 | Name="_CreateProjectDefineConstants" |
| 668 | DependsOnTargets="$(_CreateProjectDefineConstantsDependsOn)"> |
| 669 | |
| 670 | <PropertyGroup> |
| 671 | <ProjectDefineConstants> |
| 672 | Configuration=$(ConfigurationName); |
| 673 | OutDir=$(OutDir); |
| 674 | InstallerPlatform=$(InstallerPlatform); |
| 675 | Platform=$(PlatformName); |
| 676 | ProjectDir=$(ProjectDir); |
| 677 | ProjectExt=$(ProjectExt); |
| 678 | ProjectFileName=$(ProjectFileName); |
| 679 | ProjectName=$(ProjectName); |
| 680 | ProjectPath=$(ProjectPath); |
| 681 | TargetDir=$(TargetDir); |
| 682 | TargetExt=$(TargetExt); |
| 683 | TargetFileName=$(TargetFileName); |
| 684 | TargetName=$(TargetName); |
| 685 | TargetPath=$(TargetPath); |
| 686 | </ProjectDefineConstants> |
| 687 | </PropertyGroup> |
| 688 | |
| 689 | <PropertyGroup> |
| 690 | <SolutionDefineConstants Condition=" '$(DevEnvDir)'!='*Undefined*' ">$(SolutionDefineConstants);DevEnvDir=$(DevEnvDir)</SolutionDefineConstants> |
| 691 | <SolutionDefineConstants Condition=" '$(SolutionDir)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionDir=$(SolutionDir)</SolutionDefineConstants> |
| 692 | <SolutionDefineConstants Condition=" '$(SolutionExt)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionExt=$(SolutionExt)</SolutionDefineConstants> |
| 693 | <SolutionDefineConstants Condition=" '$(SolutionFileName)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionFileName=$(SolutionFileName)</SolutionDefineConstants> |
| 694 | <SolutionDefineConstants Condition=" '$(SolutionName)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionName=$(SolutionName)</SolutionDefineConstants> |
| 695 | <SolutionDefineConstants Condition=" '$(SolutionPath)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionPath=$(SolutionPath)</SolutionDefineConstants> |
| 696 | </PropertyGroup> |
| 697 | </Target> |
| 698 | |
| 699 | <!-- |
| 700 | ================================================================================================ |
| 701 | ReadPreviousBindInputsAndBuiltOutputs |
| 702 | |
| 703 | Reads a previous build's Bind contents and built outputs file into @(_BindInputs) and |
| 704 | @(_BindBuiltOutputs) respectively. |
| 705 | |
| 706 | Note: Only the *built* outputs are used because using files copied to output folder |
| 707 | can cause perpetual incremental build. |
| 708 | |
| 709 | Imagine the case where you have: Msi.wixproj -> Lib.wixproj -> Exe.csproj. The |
| 710 | Exe.csproj cannot be both an input to Lib.wixproj and an output of Msi.wixproj |
| 711 | (as an uncompressed file) because the Lib.wixproj will always newer than the |
| 712 | Exe.csproj. |
| 713 | |
| 714 | [IN] |
| 715 | |
| 716 | [OUT] |
| 717 | @(_BindInputs) - the content files required to bind (i.e. the Binary/@SourceFile and File/@Source files). |
| 718 | @(_BindBuiltOutputs) - the previously built .msi, .msm, .pcp, .exe .wixpdb, .cabs, etc. |
| 719 | Does not include content copied to output folder. |
| 720 | ================================================================================================ |
| 721 | --> |
| 722 | <Target |
| 723 | Name="ReadPreviousBindInputsAndBuiltOutputs"> |
| 724 | |
| 725 | <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)"> |
| 726 | <Output TaskParameter="Inputs" ItemName="_BindInputs" /> |
| 727 | <Output TaskParameter="BuiltOutputs" ItemName="_BindBuiltOutputs" /> |
| 728 | </ReadTracking> |
| 729 | </Target> |
| 730 | |
| 731 | <!-- |
| 732 | ================================================================================================ |
| 733 | UpdateFileWritesWithBindInformation |
| 734 | |
| 735 | Reads the bind outputs file(s) output generated during WixBuild to correctly set the @(FileWrites) |
| 736 | item. Most targets have it easy because they can do a static mapping from inputs to the outputs. |
| 737 | However, the WixBuild target outputs are determined after a rather complex calculation we call |
| 738 | linking and binding! |
| 739 | |
| 740 | This is an "after target" of CoreCompile to ensure it always runs, even if compiler was up to date. It |
| 741 | reads the outputs file generated during the CoreCompile target. |
| 742 | |
| 743 | [IN] |
| 744 | Path to bind outputs file(s). |
| 745 | |
| 746 | [OUT] |
| 747 | @(FileWrites) updated with outputs from bind. |
| 748 | ================================================================================================ |
| 749 | --> |
| 750 | <Target |
| 751 | Name="UpdateFileWritesWithBindInformation" |
| 752 | AfterTargets="CoreCompile"> |
| 753 | |
| 754 | <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)"> |
| 755 | <Output TaskParameter="Outputs" ItemName="FileWrites" /> |
| 756 | </ReadTracking> |
| 757 | |
| 758 | <ItemGroup> |
| 759 | <FileWrites Include="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)" Condition=" Exists('$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)') " /> |
| 760 | </ItemGroup> |
| 761 | </Target> |
| 762 | |
| 763 | <!-- |
| 764 | *********************************************************************************************** |
| 765 | *********************************************************************************************** |
| 766 | AllProjectOutputGroups Section |
| 767 | *********************************************************************************************** |
| 768 | *********************************************************************************************** |
| 769 | --> |
| 770 | |
| 771 | <!-- |
| 772 | ================================================================================================ |
| 773 | AllProjectOutputGroups - OVERRIDE Target |
| 774 | |
| 775 | The targets below drive output groups, which provide generic information about a |
| 776 | project's inputs (e.g., content files, compilation sources, etc.) and built outputs |
| 777 | (e.g., built EXE/MSI, wixpdb, content files, etc.) |
| 778 | |
| 779 | Each target may produce two kinds of items: outputs and dependencies. Outputs are |
| 780 | items from the current project; dependencies are items that are brought into the |
| 781 | current project as a result of referencing other projects or components. |
| 782 | |
| 783 | For both outputs and dependencies, the Include attribute |
| 784 | specifies the location of the output/dependency; it must be a full path. Any number |
| 785 | of additional attributes may be placed on an output/dependency item. |
| 786 | ================================================================================================ |
| 787 | --> |
| 788 | <Target |
| 789 | Name="AllProjectOutputGroups" |
| 790 | DependsOnTargets=" |
| 791 | BuiltProjectOutputGroup; |
| 792 | DebugSymbolsProjectOutputGroup; |
| 793 | SourceFilesProjectOutputGroup; |
| 794 | ContentFilesProjectOutputGroup" /> |
| 795 | |
| 796 | <!-- |
| 797 | This is the key output for the BuiltProjectOutputGroup and is meant to be read directly from the IDE. |
| 798 | Reading an item is faster than invoking a target. |
| 799 | --> |
| 800 | <ItemGroup> |
| 801 | <BuiltProjectOutputGroupKeyOutput Include="$(TargetPath)"> |
| 802 | <IsKeyOutput>true</IsKeyOutput> |
| 803 | <FinalOutputPath>$(TargetPath)</FinalOutputPath> |
| 804 | <TargetPath>$(TargetFileName)</TargetPath> |
| 805 | </BuiltProjectOutputGroupKeyOutput> |
| 806 | </ItemGroup> |
| 807 | |
| 808 | <!-- |
| 809 | ================================================================================================ |
| 810 | BuiltProjectOutputGroup - OVERRIDE Target |
| 811 | ================================================================================================ |
| 812 | --> |
| 813 | <PropertyGroup> |
| 814 | <BuiltProjectOutputGroupDependsOn>PrepareForBuild;AssignTargetPaths</BuiltProjectOutputGroupDependsOn> |
| 815 | </PropertyGroup> |
| 816 | <Target |
| 817 | Name="BuiltProjectOutputGroup" |
| 818 | Outputs="@(BuiltProjectOutputGroupOutput)" |
| 819 | DependsOnTargets="$(BuiltProjectOutputGroupDependsOn)"> |
| 820 | |
| 821 | <!-- Don't add BuiltProjectOutputGroupKeyOutput - to avoid duplicates, we only want to get the updated list of TargetPaths from the TargetPath property below --> |
| 822 | |
| 823 | <!-- Try to read the outputs from the bind tracking text file since that's the output list straight from compiler. --> |
| 824 | <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)"> |
| 825 | <Output TaskParameter="Outputs" ItemName="_BuiltProjectOutputGroupOutputIntermediate" /> |
| 826 | </ReadTracking> |
| 827 | |
| 828 | <!-- If we didn't get anything from the bind outputs text file, default to the target path. --> |
| 829 | <ItemGroup Condition=" '@(_BuiltProjectOutputGroupOutputIntermediate)'=='' "> |
| 830 | <_BuiltProjectOutputGroupOutputIntermediate Include="$(TargetPath)" /> |
| 831 | </ItemGroup> |
| 832 | |
| 833 | <!-- Convert intermediate items into final items; this way we can get the full path for each item --> |
| 834 | <ItemGroup> |
| 835 | <BuiltProjectOutputGroupOutput Include="@(_BuiltProjectOutputGroupOutputIntermediate->'%(FullPath)')"> |
| 836 | <!-- For compatibility with 2.0 --> |
| 837 | <OriginalItemSpec Condition="'%(_BuiltProjectOutputGroupOutputIntermediate.OriginalItemSpec)' == ''">%(_BuiltProjectOutputGroupOutputIntermediate.FullPath)</OriginalItemSpec> |
| 838 | </BuiltProjectOutputGroupOutput> |
| 839 | </ItemGroup> |
| 840 | </Target> |
| 841 | |
| 842 | <!-- |
| 843 | ================================================================================================ |
| 844 | DebugSymbolsProjectOutputGroup - OVERRIDE Target |
| 845 | |
| 846 | Populates the Debug Symbols project output group. |
| 847 | ================================================================================================ |
| 848 | --> |
| 849 | <PropertyGroup> |
| 850 | <DebugSymbolsProjectOutputGroupDependsOn>AssignTargetPaths</DebugSymbolsProjectOutputGroupDependsOn> |
| 851 | </PropertyGroup> |
| 852 | <Target |
| 853 | Name="DebugSymbolsProjectOutputGroup" |
| 854 | Outputs="@(DebugSymbolsProjectOutputGroupOutput)" |
| 855 | DependsOnTargets="$(DebugSymbolsProjectOutputGroupDependsOn)"> |
| 856 | |
| 857 | <!-- Include build output pdb(s). Different than predefined itemgroup since AssignTargetPaths target may change --> |
| 858 | <ItemGroup> |
| 859 | <DebugSymbolsProjectOutputGroupOutput Include="$(TargetPdbPath)" Condition=" '$(DebugType)' != 'none' "/> |
| 860 | </ItemGroup> |
| 861 | </Target> |
| 862 | |
| 863 | <!-- |
| 864 | *********************************************************************************************** |
| 865 | *********************************************************************************************** |
| 866 | PrepareForRun Section |
| 867 | *********************************************************************************************** |
| 868 | *********************************************************************************************** |
| 869 | --> |
| 870 | |
| 871 | <!-- |
| 872 | ================================================================================================ |
| 873 | CopyFilesToOutputDirectory - OVERRIDE Target |
| 874 | |
| 875 | Copy all build outputs, satellites and other necessary files to the final directory. |
| 876 | ================================================================================================ |
| 877 | --> |
| 878 | <Target |
| 879 | Name="CopyFilesToOutputDirectory"> |
| 880 | |
| 881 | <PropertyGroup> |
| 882 | <!-- By default we're using hard links to copy to the output directory, disabling this could slow the build significantly --> |
| 883 | <CreateHardLinksForCopyFilesToOutputDirectoryIfPossible Condition=" '$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)' == '' ">true</CreateHardLinksForCopyFilesToOutputDirectoryIfPossible> |
| 884 | <CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible Condition="'$(BuildingInsideVisualStudio)' == 'true' or '$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)' == ''">false</CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible> |
| 885 | <ErrorIfLinkFailsForCopyFilesToOutputDirectory Condition="'$(BuildingInsideVisualStudio)' == 'true' or '$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)' == ''">false</ErrorIfLinkFailsForCopyFilesToOutputDirectory> |
| 886 | </PropertyGroup> |
| 887 | |
| 888 | <PropertyGroup> |
| 889 | <CopyBuildOutputToOutputDirectory Condition="'$(CopyBuildOutputToOutputDirectory)'==''">true</CopyBuildOutputToOutputDirectory> |
| 890 | <CopyOutputSymbolsToOutputDirectory Condition="'$(CopyOutputSymbolsToOutputDirectory)'==''">true</CopyOutputSymbolsToOutputDirectory> |
| 891 | <FullIntermediateOutputPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath)))</FullIntermediateOutputPath> |
| 892 | </PropertyGroup> |
| 893 | |
| 894 | <!-- Add the target output to the list to be copied. --> |
| 895 | <ItemGroup> |
| 896 | <_FullPathToCopy Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)" /> |
| 897 | </ItemGroup> |
| 898 | |
| 899 | <!-- Add the bound content output files to the list to be copied. --> |
| 900 | <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.OutputSuffix)$(BindTrackingFileExtension)"> |
| 901 | <Output TaskParameter="BuiltContentOutputs" ItemName="_FullPathToCopy" /> |
| 902 | <Output TaskParameter="CopiedOutputs" ItemName="_FullPathToCopy" /> |
| 903 | </ReadTracking> |
| 904 | |
| 905 | <ItemGroup> |
| 906 | <_RelativePath Include="$([MSBuild]::MakeRelative("$(FullIntermediateOutputPath)", "%(_FullPathToCopy.FullPath)"))" /> |
| 907 | </ItemGroup> |
| 908 | |
| 909 | <Copy |
| 910 | SourceFiles="@(_RelativePath->'$(IntermediateOutputPath)%(Identity)')" |
| 911 | DestinationFiles="@(_RelativePath->'$(OutDir)%(Identity)')" |
| 912 | SkipUnchangedFiles="$(SkipCopyUnchangedFiles)" |
| 913 | OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)" |
| 914 | Retries="$(CopyRetryCount)" |
| 915 | RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" |
| 916 | UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)" |
| 917 | UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)" |
| 918 | ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)" |
| 919 | Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'"> |
| 920 | |
| 921 | <Output TaskParameter="DestinationFiles" ItemName="MainAssembly"/> |
| 922 | <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/> |
| 923 | </Copy> |
| 924 | |
| 925 | <Message Importance="High" Text="$(MSBuildProjectName) -> $(TargetPath)" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)'!='true'" /> |
| 926 | |
| 927 | <!-- Copy the debug information file (.wixpdb), if any --> |
| 928 | <Copy |
| 929 | SourceFiles="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" |
| 930 | DestinationFiles="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" |
| 931 | SkipUnchangedFiles="$(SkipCopyUnchangedFiles)" |
| 932 | OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)" |
| 933 | Retries="$(CopyRetryCount)" |
| 934 | RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" |
| 935 | UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)" |
| 936 | Condition="'$(_DebugSymbolsProduced)'=='true' and '$(SkipCopyingSymbolsToOutputDirectory)' != 'true' and '$(CopyOutputSymbolsToOutputDirectory)'=='true'"> |
| 937 | |
| 938 | <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/> |
| 939 | |
| 940 | </Copy> |
| 941 | </Target> |
| 942 | |
| 943 | <Import Project="WixToolset.Signing.targets" Condition=" '$(WixSigningTargetsImported)' != 'true' " /> |
| 944 | |
| 945 | <!-- Extension point: Define CustomAfterWixTargets to a .targets file that you want to include after this file. --> |
| 946 | <Import Project="$(CustomAfterWixTargets)" Condition=" '$(CustomAfterWixTargets)' != '' and Exists('$(CustomAfterWixTargets)')" /> |
| 947 | |
| 948 | <PropertyGroup> |
| 949 | <DefaultItemExcludes Condition=" '$(BaseOutputPath)' != '' ">$(DefaultItemExcludes);$(BaseOutputPath)**</DefaultItemExcludes> |
| 950 | <DefaultItemExcludes Condition=" '$(BaseIntermediateOutputPath)' != '' ">$(DefaultItemExcludes);$(BaseIntermediateOutputPath)**</DefaultItemExcludes> |
| 951 | <DefaultExcludesInProjectFolder>$(DefaultItemExcludesInProjectFolder);**/.*/**</DefaultExcludesInProjectFolder> |
| 952 | </PropertyGroup> |
| 953 | |
| 954 | <ImportGroup> |
| 955 | <Import Project="$(MSBuildUserExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportAfter\*" Condition="'$(ImportUserLocationsByWildcardAfterWixToolsetTargets)' != 'false' and Exists('$(MSBuildUserExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportAfter')" /> |
| 956 | <Import Project="$(MSBuildExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportAfter\*" Condition="'$(ImportByWildcardAfterWixToolsetTargets)' != 'false' and Exists('$(MSBuildExtensionsPath)\WixToolset\$(WixToolsetMajorMinorVersion)\Imports\WixToolset.targets\ImportAfter')" /> |
| 957 | </ImportGroup> |
| 958 | </Project> |