aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.BuildTasks/wix.targets
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-05-28 23:00:05 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-05-28 23:10:12 +1000
commitef0dbdc18c4335fef395fb954845031ea90503be (patch)
tree1d9bec91f1fbef5b24cdfdb45a05ef2ee5e6caee /src/WixToolset.BuildTasks/wix.targets
parent551f2a43de0465202e3a3aca24379481cc35733e (diff)
downloadwix-ef0dbdc18c4335fef395fb954845031ea90503be.tar.gz
wix-ef0dbdc18c4335fef395fb954845031ea90503be.tar.bz2
wix-ef0dbdc18c4335fef395fb954845031ea90503be.zip
Move the targets files into the top-level tools folder.
Diffstat (limited to 'src/WixToolset.BuildTasks/wix.targets')
-rw-r--r--src/WixToolset.BuildTasks/wix.targets1063
1 files changed, 0 insertions, 1063 deletions
diff --git a/src/WixToolset.BuildTasks/wix.targets b/src/WixToolset.BuildTasks/wix.targets
deleted file mode 100644
index b8d6bb34..00000000
--- a/src/WixToolset.BuildTasks/wix.targets
+++ /dev/null
@@ -1,1063 +0,0 @@
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" InitialTargets="_CheckRequiredProperties" DefaultTargets="Build">
5 <PropertyGroup>
6 <WixTargetsImported>true</WixTargetsImported>
7 </PropertyGroup>
8
9 <!--
10 //////////////////////////////////////////////////////////////////////////////////////////////////
11 //////////////////////////////////////////////////////////////////////////////////////////////////
12 Extension Points
13 //////////////////////////////////////////////////////////////////////////////////////////////////
14 //////////////////////////////////////////////////////////////////////////////////////////////////
15 -->
16
17 <!-- Allow a user-customized targets files to be used as part of the build. -->
18 <Import Project="$(CustomBeforeWixTargets)" Condition=" '$(CustomBeforeWixTargets)' != '' and Exists('$(CustomBeforeWixTargets)')" />
19
20 <!-- These properties can be overridden to support non-default installations. -->
21 <PropertyGroup>
22 <WixBinDir Condition=" '$(WixBinDir)' == ''">$(MSBuildThisFileDirectory)</WixBinDir>
23 <WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(WixBinDir)WixToolset.BuildTasks.dll</WixTasksPath>
24 <WixHarvestTargetsPath Condition=" '$(WixHarvestTargetsPath)' == '' ">$(WixBinDir)wix.harvest.targets</WixHarvestTargetsPath>
25 <WixSigningTargetsPath Condition=" '$(WixSigningTargetsPath)' == '' ">$(WixBinDir)wix.signing.targets</WixSigningTargetsPath>
26 <LuxTargetsPath Condition=" '$(LuxTargetsPath)' == '' ">$(WixBinDir)lux.targets</LuxTargetsPath>
27 <LuxTasksPath Condition=" '$(LuxTasksPath)' == '' ">$(WixBinDir)LuxTasks.dll</LuxTasksPath>
28 </PropertyGroup>
29
30 <!-- This makes the project files a dependency of all targets so that things rebuild if they change -->
31 <PropertyGroup>
32 <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
33 <MSBuildAllProjects Condition="Exists('$(WixHarvestTargetsPath)')">$(MSBuildAllProjects);$(WixHarvestTargetsPath)</MSBuildAllProjects>
34 <MSBuildAllProjects Condition="Exists('$(WixSigningTargetsPath)')">$(MSBuildAllProjects);$(WixSigningTargetsPath)</MSBuildAllProjects>
35 <MSBuildAllProjects Condition="Exists('$(LuxTargetsPath)')">$(MSBuildAllProjects);$(LuxTargetsPath)</MSBuildAllProjects>
36 <MSBuildAllProjects Condition="Exists('$(CustomBeforeWixTargets)')">$(MSBuildAllProjects);$(CustomBeforeWixTargets)</MSBuildAllProjects>
37 <MSBuildAllProjects Condition="Exists('$(CustomAfterWixTargets)')">$(MSBuildAllProjects);$(CustomAfterWixTargets)</MSBuildAllProjects>
38 </PropertyGroup>
39
40 <!--
41 //////////////////////////////////////////////////////////////////////////////////////////////////
42 //////////////////////////////////////////////////////////////////////////////////////////////////
43 Declarations for Microsoft.Common.targets
44 //////////////////////////////////////////////////////////////////////////////////////////////////
45 //////////////////////////////////////////////////////////////////////////////////////////////////
46 -->
47
48 <PropertyGroup>
49 <DefaultLanguageSourceExtension>.wxs</DefaultLanguageSourceExtension>
50 <Language>wix</Language>
51 <TargetRuntime>wix</TargetRuntime>
52
53 <!-- Use OutputName to set the AssemblyName for Microsoft.Common.targets -->
54 <OutputName Condition=" '$(OutputName)'=='' ">$(MSBuildProjectName)</OutputName>
55 <AssemblyName>$(OutputName)</AssemblyName>
56
57 <!-- Default OutputType to a known WiX Toolset type. -->
58 <OutputType Condition=" '$(OutputType)' == '' ">Package</OutputType>
59
60 <!-- Default WixPdbType to a known WiX Toolset type. -->
61 <WixPdbType Condition=" '$(WixPdbType)' == '' ">full</WixPdbType>
62 </PropertyGroup>
63
64 <!--
65 IDE Macros available from both integrated builds and from command line builds.
66 The following properties are 'macros' that are available via IDE for pre and post build steps.
67 All of them should be added to WixBuildMacroCollection to ensure that they are shown in the UI.
68 -->
69 <PropertyGroup Condition=" '$(TargetExt)' == '' ">
70 <TargetExt Condition=" '$(OutputType)' == 'Package' ">.msi</TargetExt>
71 <TargetExt Condition=" '$(OutputType)' == 'Module' ">.msm</TargetExt>
72 <TargetExt Condition=" '$(OutputType)' == 'PatchCreation' ">.pcp</TargetExt>
73 <TargetExt Condition=" '$(OutputType)' == 'Library' ">.wixlib</TargetExt>
74 <TargetExt Condition=" '$(OutputType)' == 'Bundle' ">.exe</TargetExt>
75 <TargetExt Condition=" '$(OutputType)' == 'IntermediatePostLink' ">.wixipl</TargetExt>
76 </PropertyGroup>
77
78 <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
79
80 <PropertyGroup>
81 <!-- Default pdb output path to the intermediate output directory -->
82 <PdbOutputDir Condition=" '$(PdbOutputDir)'=='' ">$(TargetDir)</PdbOutputDir>
83 <PdbOutputDir Condition=" !HasTrailingSlash('$(PdbOutputDir)') ">$(PdbOutputDir)\</PdbOutputDir>
84
85 <!-- Example, C:\MyProjects\MyProject\bin\debug\ -->
86 <TargetPdbDir Condition=" '$(PdbOutputDir)'!='' ">$([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(PdbOutputDir)`))`))</TargetPdbDir>
87
88 <!-- Example, MySetup.wixpdb" -->
89 <TargetPdbFileName Condition=" '$(TargetPdbFileName)' == '' ">$(TargetName).wixpdb</TargetPdbFileName>
90
91 <!-- Example, C:\MyProjects\MyProject\bin\debug\MyPackage.wixpdb -->
92 <TargetPdbPath Condition=" '$(TargetPdbPath)' == '' ">$(TargetPdbDir)$(TargetPdbFileName)</TargetPdbPath>
93 </PropertyGroup>
94
95 <!--
96 //////////////////////////////////////////////////////////////////////////////////////////////////
97 //////////////////////////////////////////////////////////////////////////////////////////////////
98 Property Declarations
99 //////////////////////////////////////////////////////////////////////////////////////////////////
100 //////////////////////////////////////////////////////////////////////////////////////////////////
101 -->
102
103 <!-- These tasks can be used as general-purpose build tasks. -->
104 <UsingTask TaskName="WixBuild" AssemblyFile="$(WixTasksPath)" />
105
106 <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. -->
107 <UsingTask TaskName="CreateItemAvoidingInference" AssemblyFile="$(WixTasksPath)" />
108 <UsingTask TaskName="CreateProjectReferenceDefineConstants" AssemblyFile="$(WixTasksPath)" />
109 <UsingTask TaskName="WixAssignCulture" AssemblyFile="$(WixTasksPath)" />
110 <UsingTask TaskName="ResolveWixReferences" AssemblyFile="$(WixTasksPath)"/>
111 <UsingTask TaskName="ReplaceString" AssemblyFile="$(WixTasksPath)"/>
112 <UsingTask TaskName="GenerateCompileWithObjectPath" AssemblyFile="$(WixTasksPath)"/>
113
114 <PropertyGroup>
115 <BindContentsFile Condition=" '$(BindContentsFile)' == '' ">$(MSBuildProjectFile).BindContentsFileList.txt</BindContentsFile>
116 <BindOutputsFile Condition=" '$(BindOutputsFile)' == '' ">$(MSBuildProjectFile).BindOutputsFileList.txt</BindOutputsFile>
117 <BindBuiltOutputsFile Condition=" '$(BindBuiltOutputsFile)' == '' ">$(MSBuildProjectFile).BindBuiltOutputsFileList.txt</BindBuiltOutputsFile>
118 </PropertyGroup>
119
120 <PropertyGroup>
121 <CabinetCachePath Condition=" '$(CabinetCachePath)'=='' and '$(ReuseCabinetCache)'=='true' ">$(IntermediateOutputPath)cabcache\</CabinetCachePath>
122 </PropertyGroup>
123
124 <PropertyGroup>
125 <WixExtDir Condition=" '$(WixExtDir)' == ''">$(WixBinDir)</WixExtDir>
126 </PropertyGroup>
127
128 <!--
129 //////////////////////////////////////////////////////////////////////////////////////////////////
130 //////////////////////////////////////////////////////////////////////////////////////////////////
131 Default Compiler, Linker, and Librarian Property Declarations
132 //////////////////////////////////////////////////////////////////////////////////////////////////
133 //////////////////////////////////////////////////////////////////////////////////////////////////
134 -->
135
136 <!-- If WixExtension was passed in via the command line, then convert it to an ItemGroup -->
137 <ItemGroup>
138 <WixExtension Include="$(WixExtension)" Condition=" '$(WixExtension)' != '' " />
139 </ItemGroup>
140
141 <!-- Defaut Compiler properties. -->
142 <PropertyGroup>
143 <CompilerNoLogo Condition=" '$(CompilerNoLogo)' == '' ">$(NoLogo)</CompilerNoLogo>
144 <CompilerSuppressAllWarnings Condition=" '$(CompilerSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</CompilerSuppressAllWarnings>
145 <CompilerSuppressSpecificWarnings Condition=" '$(CompilerSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</CompilerSuppressSpecificWarnings>
146 <CompilerTreatWarningsAsErrors Condition=" '$(CompilerTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</CompilerTreatWarningsAsErrors>
147 <CompilerTreatSpecificWarningsAsErrors Condition=" '$(CompilerTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</CompilerTreatSpecificWarningsAsErrors>
148 <CompilerVerboseOutput Condition=" '$(CompilerVerboseOutput)' == '' ">$(VerboseOutput)</CompilerVerboseOutput>
149 <!-- TODO: This probably doesn't work any longer since Platform won't be defined until Microsoft.Common.targets is included -->
150 <InstallerPlatform Condition=" '$(InstallerPlatform)' == '' and '$(Platform)' != 'AnyCPU' and '$(Platform)' != 'Any CPU' ">$(Platform)</InstallerPlatform>
151 </PropertyGroup>
152
153 <!-- Default Lib properties. -->
154 <PropertyGroup>
155 <LibNoLogo Condition=" '$(LibNoLogo)' == '' ">$(NoLogo)</LibNoLogo>
156 <LibBindFiles Condition=" '$(LibBindFiles)' == '' ">$(BindFiles)</LibBindFiles>
157 <LibPedantic Condition=" '$(LibPedantic)' == '' ">$(Pedantic)</LibPedantic>
158 <LibSuppressAllWarnings Condition=" '$(LibSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</LibSuppressAllWarnings>
159 <LibSuppressSpecificWarnings Condition=" '$(LibSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</LibSuppressSpecificWarnings>
160 <LibSuppressSchemaValidation Condition=" '$(LibSuppressSchemaValidation)' == '' ">$(SuppressSchemaValidation)</LibSuppressSchemaValidation>
161 <LibSuppressIntermediateFileVersionMatching Condition=" '$(LibSuppressIntermediateFileVersionMatching)' == '' ">$(SuppressIntermediateFileVersionMatching)</LibSuppressIntermediateFileVersionMatching>
162 <LibTreatWarningsAsErrors Condition=" '$(LibTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</LibTreatWarningsAsErrors>
163 <LibTreatSpecificWarningsAsErrors Condition=" '$(LibTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</LibTreatSpecificWarningsAsErrors>
164 <LibVerboseOutput Condition=" '$(LibVerboseOutput)' == '' ">$(VerboseOutput)</LibVerboseOutput>
165 </PropertyGroup>
166
167 <!-- Default Linker properties. -->
168 <PropertyGroup>
169 <LinkerNoLogo Condition=" '$(LinkerNoLogo)' == '' ">$(NoLogo)</LinkerNoLogo>
170 <LinkerBindFiles Condition=" '$(LinkerBindFiles)' == '' ">$(BindFiles)</LinkerBindFiles>
171 <LinkerPedantic Condition=" '$(LinkerPedantic)' == '' ">$(Pedantic)</LinkerPedantic>
172 <LinkerSuppressAllWarnings Condition=" '$(LinkerSuppressAllWarnings)' == '' ">$(SuppressAllWarnings)</LinkerSuppressAllWarnings>
173 <LinkerSuppressSpecificWarnings Condition=" '$(LinkerSuppressSpecificWarnings)' == '' ">$(SuppressSpecificWarnings)</LinkerSuppressSpecificWarnings>
174 <LinkerSuppressSchemaValidation Condition=" '$(LinkerSuppressSchemaValidation)' == '' ">$(SuppressSchemaValidation)</LinkerSuppressSchemaValidation>
175 <LinkerSuppressIntermediateFileVersionMatching Condition=" '$(LinkerSuppressIntermediateFileVersionMatching)' == '' ">$(SuppressIntermediateFileVersionMatching)</LinkerSuppressIntermediateFileVersionMatching>
176 <LinkerTreatWarningsAsErrors Condition=" '$(LinkerTreatWarningsAsErrors)' == '' ">$(TreatWarningsAsErrors)</LinkerTreatWarningsAsErrors>
177 <LinkerTreatSpecificWarningsAsErrors Condition=" '$(LinkerTreatSpecificWarningsAsErrors)' == '' ">$(TreatSpecificWarningsAsErrors)</LinkerTreatSpecificWarningsAsErrors>
178 <LinkerVerboseOutput Condition=" '$(LinkerVerboseOutput)' == '' ">$(VerboseOutput)</LinkerVerboseOutput>
179 </PropertyGroup>
180
181 <!-- If BindInputPaths (or LinkerBindInputPaths) was passed in via the command line, then convert it to an ItemGroup -->
182 <ItemGroup>
183 <BindInputPaths Include="$(BindInputPaths)" Condition=" '$(BindInputPaths)' != '' " />
184 <LinkerBindInputPaths Include="$(LinkerBindInputPaths)" Condition=" '$(LinkerBindInputPaths)' != '' " />
185 </ItemGroup>
186
187 <!-- Default Lit and Light "properties" -->
188 <ItemGroup>
189 <LinkerBindInputPaths Condition=" '@(LinkerBindInputPaths)' == '' " Include="@(BindInputPaths)" />
190 </ItemGroup>
191
192 <!--
193 //////////////////////////////////////////////////////////////////////////////////////////////////
194 //////////////////////////////////////////////////////////////////////////////////////////////////
195 Initial Targets
196 //////////////////////////////////////////////////////////////////////////////////////////////////
197 //////////////////////////////////////////////////////////////////////////////////////////////////
198 -->
199
200 <!--
201 ==================================================================================================
202 _CheckRequiredProperties
203
204 Checks properties that must be set in the main project file or on the command line before
205 using this .TARGETS file.
206
207 [IN]
208 $(OutputName) - The name of the MSI/MSM/wixlib to build (without the extension)
209 $(OutputType) - Possible values are 'Package', 'PatchCreation', 'Module', 'Library', 'Bundle', 'IntermediatePostLink'
210 ==================================================================================================
211 -->
212 <PropertyGroup>
213 <_PleaseSetThisInProjectFile>Please set this in the project file before the &lt;Import&gt; of the wix.targets file.</_PleaseSetThisInProjectFile>
214 <_OutputTypeDescription>Possible values are: 'Package', 'Module', 'Library', 'Bundle', 'IntermediatePostLink'. $(_PleaseSetThisInProjectFile)</_OutputTypeDescription>
215 </PropertyGroup>
216 <Target Name="_CheckRequiredProperties">
217
218 <Error
219 Code="WIX100"
220 Condition=" '$(OutputName)' == '' "
221 Text="The OutputName property is not set in project &quot;$(MSBuildProjectFile)&quot;. The OutputName defines the name of the output without a file extension. $(_PleaseSetThisInProjectFile)" />
222
223 <Error
224 Code="WIX101"
225 Condition=" '$(OutputType)' != 'Package' and '$(OutputType)' != 'PatchCreation' and '$(OutputType)' != 'Module' and '$(OutputType)' != 'Library' and '$(OutputType)' != 'Bundle' and '$(OutputType)' != 'IntermediatePostLink' "
226 Text="The OutputType property '$(OutputType)' is not valid in project &quot;$(MSBuildProjectFile)&quot;. $(_OutputTypeDescription)" />
227
228 <Error
229 Code="WIX102"
230 Condition=" '$(MSBuildToolsVersion)' == '' OR '$(MSBuildToolsVersion)' &lt; '4.0' "
231 Text="MSBuild v$(MSBuildToolsVersion) is not supported by the project &quot;$(MSBuildProjectFile)&quot;. You must use MSBuild v4.0 or later." />
232
233 <Error
234 Code="WIX103"
235 Condition=" '$(WixPdbType)' != 'none' and '$(WixPdbType)' != 'full' "
236 Text="The WixPdbType property '$(WixPdbType)' is not valid in project &quot;$(MSBuildProjectFile)&quot;. Supported values are: 'full', 'none'" />
237
238 </Target>
239
240 <!--
241 //////////////////////////////////////////////////////////////////////////////////////////////////
242 //////////////////////////////////////////////////////////////////////////////////////////////////
243 Build Targets
244 //////////////////////////////////////////////////////////////////////////////////////////////////
245 //////////////////////////////////////////////////////////////////////////////////////////////////
246 -->
247
248 <!--
249 ==================================================================================================
250 CoreBuild - OVERRIDE DependsOn
251
252 The core build step calls each of the build targets.
253
254 This is where we insert our targets into the build process.
255 ==================================================================================================
256 -->
257 <PropertyGroup>
258 <CoreBuildDependsOn>
259 BuildOnlySettings;
260 PrepareForBuild;
261 PreBuildEvent;
262
263 WixBuild;
264 Signing;
265
266 GetTargetPath;
267 PrepareForRun;
268 IncrementalClean;
269 PostBuildEvent
270 </CoreBuildDependsOn>
271 </PropertyGroup>
272
273
274 <!--
275 //////////////////////////////////////////////////////////////////////////////////////////////////
276 //////////////////////////////////////////////////////////////////////////////////////////////////
277 Resolve References Targets
278 //////////////////////////////////////////////////////////////////////////////////////////////////
279 //////////////////////////////////////////////////////////////////////////////////////////////////
280 -->
281
282 <!--
283 ==================================================================================================
284 ResolveReferences - OVERRIDE DependsOn
285
286 ==================================================================================================
287 -->
288 <PropertyGroup>
289 <ResolveReferencesDependsOn>
290 BeforeResolveReferences;
291 AssignProjectConfiguration;
292 ResolveProjectReferences;
293 ResolveWixLibraryReferences;
294 ResolveWixExtensionReferences;
295 AfterResolveReferences
296 </ResolveReferencesDependsOn>
297 </PropertyGroup>
298
299 <!--
300 ================================================================================================
301 ResolveProjectReferences
302
303 Builds all of the referenced projects to get their outputs.
304
305 [IN]
306 @(NonVCProjectReference) - The list of non-VC project references.
307
308 [OUT]
309 @(ProjectReferenceWithConfiguration) - The list of non-VC project references.
310 @(WixLibProjects) - Paths to any .wixlibs that were built by referenced projects.
311 ================================================================================================
312 -->
313 <Target
314 Name="ResolveProjectReferences"
315 DependsOnTargets="AssignProjectConfiguration;_SplitProjectReferencesByFileExistence"
316 Condition=" '@(ProjectReferenceWithConfiguration)' != '' ">
317
318 <!-- Issue a warning for each non-existent project. -->
319 <Warning
320 Text="The referenced project '%(_MSBuildProjectReferenceNonexistent.Identity)' does not exist."
321 Condition=" '@(_MSBuildProjectReferenceNonexistent)' != '' " />
322
323 <!--
324 When building this project from the IDE or when building a .sln from the command line or
325 when only building .wixlib project references, gather the referenced build outputs. The
326 code that builds the .sln will already have built the project, so there's no need to do
327 it again here and when building only .wixlib project references we'll use the results to
328 determine which projects to build.
329
330 The ContinueOnError setting is here so that, during project load, as much information as
331 possible will be passed to the compilers.
332 -->
333 <MSBuild
334 Projects="@(_MSBuildProjectReferenceExistent)"
335 Targets="%(_MSBuildProjectReferenceExistent.Targets);GetTargetPath"
336 Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);%(_MSBuildProjectReferenceExistent.SetPlatform)"
337 Condition="('$(BuildingSolutionFile)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true' or '$(BuildProjectReferences)' != 'true') and '@(_MSBuildProjectReferenceExistent)' != '' "
338 ContinueOnError="!$(BuildingProject)">
339
340 <Output TaskParameter="TargetOutputs" ItemName="_GatheredProjectReferencePaths" />
341 </MSBuild>
342
343 <!--
344 Determine which project references should be built. Note: we will not build any project references
345 if building in the IDE because it builds project references directly.
346
347 If BuildProjectReferences is 'true' (the default) then take all MSBuild project references that exist
348 on disk and add them to the list of things to build. This is the easy case.
349 -->
350 <CreateItem
351 Include="@(_MSBuildProjectReferenceExistent)"
352 Condition=" '$(BuildProjectReferences)' == 'true' and '$(BuildingInsideVisualStudio)' != 'true' ">
353
354 <Output TaskParameter="Include" ItemName="_ProjectReferencesToBuild" />
355 </CreateItem>
356
357 <!--
358 If BuildProjectReferences is 'wixlib' then build only the MSBuild project references that exist and
359 create a .wixlib file. That requires us to first filter the gathered project references down to only
360 those that build .wixlibs.
361 -->
362 <CreateItem
363 Include="@(_GatheredProjectReferencePaths)"
364 Condition=" '$(BuildProjectReferences)' == 'wixlib' and '%(Extension)' == '.wixlib' and '$(BuildingInsideVisualStudio)' != 'true' ">
365
366 <Output TaskParameter="Include" ItemName="_ReferencedWixLibPaths" />
367 </CreateItem>
368
369 <!--
370 The second step when building only 'wixlib' project references is to create the list of existing MSBuild
371 project references that do *not* build a .wixlib. These are the projects that will be skipped.
372 -->
373 <CreateItem
374 Include="@(_MSBuildProjectReferenceExistent->'%(FullPath)')"
375 Exclude="@(_ReferencedWixLibPaths->'%(MSBuildSourceProjectFile)')"
376 Condition=" '$(BuildProjectReferences)' == 'wixlib' and '$(BuildingInsideVisualStudio)' != 'true' ">
377
378 <Output TaskParameter="Include" ItemName="_ProjectReferencesToSkip" />
379 </CreateItem>
380
381 <!--
382 Finally, when building only 'wixlib' project references, the list of projects to build are naturally the
383 list of projects *not* being skipped.
384 -->
385 <CreateItem
386 Include="@(_MSBuildProjectReferenceExistent->'%(FullPath)')"
387 Exclude="@(_ProjectReferencesToSkip)"
388 Condition=" '$(BuildProjectReferences)' == 'wixlib' and '$(BuildingInsideVisualStudio)' != 'true' ">
389
390 <Output TaskParameter="Include" ItemName="_ProjectReferencesToBuild" />
391 </CreateItem>
392
393 <!-- Display a warning for all projects being skipped. -->
394 <Warning
395 Text="BuildProjectReferences set to '$(BuildProjectReferences)'. Skipping the non-Library project: %(_ProjectReferencesToSkip.Identity)"
396 Condition=" '@(_ProjectReferencesToSkip)' != '' " />
397
398 <Message
399 Importance="low"
400 Text="Project reference to build: %(_ProjectReferencesToBuild.Identity), properties: %(_ProjectReferencesToBuild.Properties)"
401 Condition=" '@(_ProjectReferencesToBuild)' != '' " />
402
403 <!--
404 Build referenced projects when building from the command line.
405
406 The $(ProjectReferenceBuildTargets) will normally be blank so that the project's default target
407 is used during a P2P reference. However if a custom build process requires that the referenced
408 project has a different target to build it can be specified.
409 -->
410 <MSBuild
411 Projects="@(_ProjectReferencesToBuild)"
412 Targets="$(ProjectReferenceBuildTargets)"
413 Properties="%(_ProjectReferencesToBuild.SetConfiguration);%(_ProjectReferencesToBuild.SetPlatform)"
414 Condition=" '@(_ProjectReferencesToBuild)' != '' ">
415
416 <Output TaskParameter="TargetOutputs" ItemName="_BuiltProjectReferencePaths" />
417 </MSBuild>
418
419 <!--
420 VC project references must build GetNativeTargetPath because neither GetTargetPath nor the return of the default build
421 target return the output for a native .vcxproj.
422 -->
423 <MSBuild
424 Projects="@(_MSBuildProjectReferenceExistent)"
425 Targets="GetNativeTargetPath"
426 Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);%(_MSBuildProjectReferenceExistent.SetPlatform)"
427 Condition=" '@(ProjectReferenceWithConfiguration)' != '' and '%(_MSBuildProjectReferenceExistent.Extension)' == '.vcxproj' ">
428
429 <Output TaskParameter="TargetOutputs" ItemName="_ResolvedProjectReferencePaths" />
430 <Output TaskParameter="TargetOutputs" ItemName="_MSBuildResolvedProjectReferencePaths" />
431 </MSBuild>
432
433 <!-- Assign the unique gathered and built project references to the resolved project
434 reference paths. -->
435 <RemoveDuplicates Inputs="@(_GatheredProjectReferencePaths);@(_BuiltProjectReferencePaths)">
436 <Output TaskParameter="Filtered" ItemName="_ResolvedProjectReferencePaths" />
437 <Output TaskParameter="Filtered" ItemName="_MSBuildResolvedProjectReferencePaths" />
438 </RemoveDuplicates>
439
440 <!-- Create list of all .wixlib project references. -->
441 <CreateItem
442 Include="@(_ResolvedProjectReferencePaths)"
443 Condition=" '%(Extension)' == '.wixlib' ">
444
445 <Output TaskParameter="Include" ItemName="WixLibProjects" />
446 </CreateItem>
447
448 <Message
449 Importance="low"
450 Text="Library from referenced projects: %(WixLibProjects.Identity)"
451 Condition=" '@(WixLibProjects)' != '' " />
452
453 </Target>
454
455 <!--
456 ================================================================================================
457 ResolveWixLibraryReferences
458
459 Resolve the library references to full paths.
460
461 [IN]
462 @(WixLibrary) - The list of .wixlib files.
463
464 [OUT]
465 @(_ResolvedWixLibraryPaths) - Item group with full paths to libraries
466 ================================================================================================
467 -->
468 <PropertyGroup>
469 <ResolveWixLibraryReferencesDependsOn></ResolveWixLibraryReferencesDependsOn>
470 </PropertyGroup>
471 <Target
472 Name="ResolveWixLibraryReferences"
473 DependsOnTargets="$(ResolveWixLibraryReferencesDependsOn)"
474 Condition=" '@(WixLibrary)' != ''">
475
476 <!--
477 The WixLibrarySearchPaths property is set to find assemblies in the following order:
478
479 (1) $(ReferencePaths) - the reference paths property, which comes from the .USER file.
480 (2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}.
481 (3) Treat the reference's Include as if it were a real file name.
482 (4) Path specified by the WixExtDir property.
483 -->
484 <CreateProperty Condition=" '$(WixLibrarySearchPaths)' == '' " Value="
485 $(ReferencePaths);
486 {HintPathFromItem};
487 {RawFileName};
488 $(WixExtDir)
489 ">
490 <Output TaskParameter="Value" PropertyName="WixLibrarySearchPaths" />
491 </CreateProperty>
492
493 <ResolveWixReferences
494 WixReferences="@(WixLibrary)"
495 SearchPaths="$(WixLibrarySearchPaths)"
496 SearchFilenameExtensions=".wixlib">
497 <Output TaskParameter="ResolvedWixReferences" ItemName="_AllResolvedWixLibraryPaths" />
498 </ResolveWixReferences>
499
500 <!-- Remove duplicate library items that would cause build errors -->
501 <RemoveDuplicates Inputs="@(_AllResolvedWixLibraryPaths)">
502 <Output TaskParameter="Filtered" ItemName="_ResolvedWixLibraryPaths" />
503 </RemoveDuplicates>
504
505 </Target>
506
507 <!--
508 ==================================================================================================
509 ResolveWixExtensionReferences
510
511 Resolves WiX extension references to full paths. Any properties you use
512 to resolve paths to extensions must be defined before importing this
513 file or the extensions will be automatically resolved to $(WixExtDir).
514
515 [IN]
516 @(WixExtension) - WixExtension item group
517
518 [OUT]
519 @(_ResolvedWixExtensionPaths) - Item group with full paths to extensions
520 ==================================================================================================
521 -->
522 <PropertyGroup>
523 <ResolveWixExtensionReferencesDependsOn></ResolveWixExtensionReferencesDependsOn>
524 </PropertyGroup>
525 <Target
526 Name="ResolveWixExtensionReferences"
527 DependsOnTargets="$(ResolveWixExtensionReferencesDependsOn)"
528 Condition=" '@(WixExtension)' != ''">
529
530 <!--
531 The WixExtensionSearchPaths property is set to find assemblies in the following order:
532
533 (1) $(ReferencePaths) - the reference paths property, which comes from the .USER file.
534 (2) The hintpath from the referenced item itself, indicated by {HintPathFromItem}.
535 (3) Treat the reference's Include as if it were a real file name.
536 (4) Path specified by the WixExtDir property.
537 -->
538 <CreateProperty Condition=" '$(WixExtensionSearchPaths)' == '' " Value="
539 $(ReferencePaths);
540 {HintPathFromItem};
541 {RawFileName};
542 $(WixExtDir)
543 ">
544 <Output TaskParameter="Value" PropertyName="WixExtensionSearchPaths" />
545 </CreateProperty>
546
547 <ResolveWixReferences
548 WixReferences="@(WixExtension)"
549 SearchPaths="$(WixExtensionSearchPaths)"
550 SearchFilenameExtensions=".dll">
551 <Output TaskParameter="ResolvedWixReferences" ItemName="_AllResolvedWixExtensionPaths" />
552 </ResolveWixReferences>
553
554 <!-- Remove duplicate extension items that would cause build errors -->
555 <RemoveDuplicates Inputs="@(_AllResolvedWixExtensionPaths)">
556 <Output TaskParameter="Filtered" ItemName="_ResolvedWixExtensionPaths" />
557 </RemoveDuplicates>
558 </Target>
559
560 <!--
561 ================================================================================================
562 GetTargetPath - OVERRIDE DependsOn
563
564 This stand-alone target returns the name of the build product (i.e. MSI, MSM) that would be
565 produced if we built this project.
566 ================================================================================================
567 -->
568 <PropertyGroup>
569 <GetTargetPathDependsOn>AssignTargetPaths</GetTargetPathDependsOn>
570 </PropertyGroup>
571
572
573 <!--
574 //////////////////////////////////////////////////////////////////////////////////////////////////
575 //////////////////////////////////////////////////////////////////////////////////////////////////
576 WixBuild Targets
577 //////////////////////////////////////////////////////////////////////////////////////////////////
578 //////////////////////////////////////////////////////////////////////////////////////////////////
579 -->
580
581 <!--
582 ==================================================================================================
583 WixBuild
584 ==================================================================================================
585 -->
586 <PropertyGroup>
587 <WixBuildDependsOn>
588 ResolveReferences;
589 BeforeCompile;
590 _TimeStampBeforeCompile;
591
592 CalculateDefineConstants;
593 Harvest;
594
595 GenerateCompileWithObjectPath;
596
597 AssignTargetPaths;
598 ReadPreviousBindInputsAndBuiltOutputs;
599
600 CoreWixBuild;
601
602 UpdateLinkFileWrites;
603 _TimeStampAfterCompile;
604 AfterCompile
605 </WixBuildDependsOn>
606 </PropertyGroup>
607 <Target
608 Name="WixBuild"
609 DependsOnTargets="$(WixBuildDependsOn)" />
610
611 <Target
612 Name="CoreWixBuild"
613 Inputs="@(Compile);
614 @(Content);
615 @(EmbeddedResource);
616 @(WixObject);
617 @(_ResolvedProjectReferencePaths);
618 @(_ResolvedWixLibraryPaths);
619 @(_ResolvedWixExtensionPaths);
620 @(_BindInputs);
621 $(MSBuildAllProjects)"
622 Outputs="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile);@(_BindBuiltOutputs)"
623 Condition=" '@(Compile)' != '' ">
624
625 <PropertyGroup>
626 <!--<OutputFile>$([System.IO.Path]::GetFullPath($(TargetDir)%(CultureGroup.OutputFolder)$(TargetFileName)))</OutputFile>-->
627 <OutputFile>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)))</OutputFile>
628 <!--<OutputFile>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetName)$(TargetExt)))</OutputFile>-->
629 <PdbOutputFile>$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)</PdbOutputFile>
630 </PropertyGroup>
631
632 <WixBuild
633 SourceFiles="@(_CompileWithObjectPath)"
634 LibraryFiles="@(WixLibProjects);@(_ResolvedWixLibraryPaths)"
635 LocalizationFiles="@(EmbeddedResource)"
636
637 Cultures="%(CultureGroup.Identity)"
638
639 ExtensionDirectory="$(WixExtDir)"
640 Extensions="@(_ResolvedWixExtensionPaths)"
641
642 IntermediateDirectory="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)"
643
644 OutputFile="$(OutputFile)"
645 OutputType="$(OutputType)"
646 PdbFile="$(PdbOutputFile)"
647 PdbType="$(WixPdbType)"
648
649 AdditionalOptions="$(CompilerAdditionalOptions) $(LinkerAdditionalOptions)"
650 DefineConstants="$(DefineConstants);$(SolutionDefineConstants);$(ProjectDefineConstants);$(ProjectReferenceDefineConstants)"
651 IncludeSearchPaths="$(IncludeSearchPaths)"
652 InstallerPlatform="$(InstallerPlatform)"
653 NoLogo="true"
654 Pedantic="$(Pedantic)"
655 ReferencePaths="$(ReferencePaths)"
656
657 SuppressSpecificWarnings="$(CompilerSuppressSpecificWarnings);$(LinkerSuppressSpecificWarnings)"
658 TreatSpecificWarningsAsErrors="$(CompilerTreatSpecificWarningsAsErrors)"
659
660 BindInputPaths="@(LinkerBindInputPaths)"
661 BindFiles="$(LinkerBindFiles)"
662 BindContentsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)"
663 BindOutputsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)"
664 BindBuiltOutputsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)"
665
666 CabinetCachePath="$(CabinetCachePath)"
667 CabinetCreationThreadCount="$(CabinetCreationThreadCount)"
668 DefaultCompressionLevel="$(DefaultCompressionLevel)"
669
670 UnreferencedSymbolsFile="$(UnreferencedSymbolsFile)"
671 WixProjectFile="$(ProjectPath)"
672 WixVariables="$(WixVariables)"
673
674 SuppressValidation="$(SuppressValidation)"
675 SuppressIces="$(SuppressIces)"
676 AdditionalCub="$(AdditionalCub)" />
677
678 <!--
679 SuppressAllWarnings="$(CompilerSuppressAllWarnings);$(LinkerSuppressAllWarnings)"
680 TreatWarningsAsErrors="$(CompilerTreatWarningsAsErrors);$(LinkerTreatWarningsAsErrors)"
681 VerboseOutput="$(CompilerVerboseOutput);$(LinkerVerboseOutput)"
682 -->
683 </Target>
684
685
686 <!--
687 ==================================================================================================
688 CalculateDefineConstants
689
690 Adds project references to the constants passed into the compiler.
691
692 [IN]
693 @(_ResolvedProjectReferencePaths) - paths to projects' outputs
694 $(VSProjectConfigurations) - map of project names to configurations, provided by VS when building in the IDE
695
696 [OUT]
697 $(ProjectReferenceDefineConstants) - the list of referenced project variables to be passed into the compiler
698 ==================================================================================================
699 -->
700 <PropertyGroup>
701 <CalculateDefineConstantsDependsOn>ResolveReferences</CalculateDefineConstantsDependsOn>
702 </PropertyGroup>
703 <Target
704 Name="CalculateDefineConstants"
705 DependsOnTargets="$(CalculateDefineConstantsDependsOn)"
706 Condition=" '@(_ResolvedProjectReferencePaths)' != '' ">
707
708 <PropertyGroup>
709 <ProjectDefineConstants>
710 Configuration=$(ConfigurationName);
711 OutDir=$(OutDir);
712 Platform=$(PlatformName);
713 ProjectDir=$(ProjectDir);
714 ProjectExt=$(ProjectExt);
715 ProjectFileName=$(ProjectFileName);
716 ProjectName=$(ProjectName);
717 ProjectPath=$(ProjectPath);
718 TargetDir=$(TargetDir);
719 TargetExt=$(TargetExt);
720 TargetFileName=$(TargetFileName);
721 TargetName=$(TargetName);
722 TargetPath=$(TargetPath);
723 </ProjectDefineConstants>
724 </PropertyGroup>
725
726 <PropertyGroup>
727 <SolutionDefineConstants Condition=" '$(DevEnvDir)'!='*Undefined*' ">$(SolutionDefineConstants);DevEnvDir=$(DevEnvDir)</SolutionDefineConstants>
728 <SolutionDefineConstants Condition=" '$(SolutionDir)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionDir=$(SolutionDir)</SolutionDefineConstants>
729 <SolutionDefineConstants Condition=" '$(SolutionExt)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionExt=$(SolutionExt)</SolutionDefineConstants>
730 <SolutionDefineConstants Condition=" '$(SolutionFileName)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionFileName=$(SolutionFileName)</SolutionDefineConstants>
731 <SolutionDefineConstants Condition=" '$(SolutionName)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionName=$(SolutionName)</SolutionDefineConstants>
732 <SolutionDefineConstants Condition=" '$(SolutionPath)'!='*Undefined*' ">$(SolutionDefineConstants);SolutionPath=$(SolutionPath)</SolutionDefineConstants>
733 </PropertyGroup>
734
735 <CreateProjectReferenceDefineConstants
736 ProjectReferencePaths="@(_ResolvedProjectReferencePaths)"
737 ProjectConfigurations="$(VSProjectConfigurations)">
738
739 <Output TaskParameter="DefineConstants" PropertyName="ProjectReferenceDefineConstants" />
740 </CreateProjectReferenceDefineConstants>
741
742 <ItemGroup>
743 <LinkerBindInputPaths Include="%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)" />
744 </ItemGroup>
745 </Target>
746
747 <!--
748 ================================================================================================
749 GenerateCompileWithObjectPath
750
751 Generates metadata on the for compile output objects.
752
753 ================================================================================================
754 -->
755 <PropertyGroup>
756 <GenerateCompileWithObjectPathDependsOn></GenerateCompileWithObjectPathDependsOn>
757 </PropertyGroup>
758 <Target
759 Name="GenerateCompileWithObjectPath"
760 Condition=" '@(Compile)' != '' ">
761
762 <GenerateCompileWithObjectPath
763 Compile="@(Compile)"
764 IntermediateOutputPath="$(IntermediateOutputPath)">
765 <Output TaskParameter="CompileWithObjectPath" ItemName="_CompileWithObjectPath" />
766 </GenerateCompileWithObjectPath>
767 </Target>
768
769 <!--
770 ================================================================================================
771 AssignTargetPaths - OVERRIDE Target
772
773 Determines the final list of culture groups to build based on either the Cultures property or
774 those specified in .wxl files.
775
776 Culture groups specified in the Cultures property must be specified as a semi-colon
777 delimited list of groups, with comma-delimited cultures within a group.
778 For example:
779 <Cultures>en-US,en;en-GB,en</Cultures>
780 This will build 2 targets, outputing to en-US and en-GB sub-folders. Light will first look
781 for strings in the first culture (en-US or en-GB) then the second (en).
782
783 Cultures of .wxl files will be used when the Culture property is not set. The culture of a
784 .wxl file is determined by the Culture attribute in the WixLocalization element in the file
785
786 Sets the OutputFolder metadata on each culture group. In most cases this is the same as the
787 first culture in the culture group. When the Culture's property is unspecified and no .wxl
788 files are provided this is the same as the output directory. When the Culture's property
789 specifies a single culture group and no .wxl files are provided this is the same as the output
790 directory.
791
792 Updates the TargetPath and TargetPdbPath properties to be used in subsequent targets.
793
794 [IN]
795 @(EmbeddedResource) - The list of wxl files to use for localization.
796 $(Cultures) - The list of culture groups to build.
797
798 [OUT]
799 @(CultureGroup) - The list of culture group strings with OutputFolder metadata
800 $(TargetPath) - Property list of target link output MSIs/MSMs
801 $(TargetPdbPath) - Property list of target output pdbs
802
803 ================================================================================================
804 -->
805 <Target
806 Name="AssignTargetPaths"
807 Condition=" '$(OutputType)' == 'Package' or '$(OutputType)' == 'PatchCreation' or '$(OutputType)' == 'Module' ">
808
809 <WixAssignCulture Cultures="$(Cultures)" Files="@(EmbeddedResource)">
810 <Output TaskParameter="CultureGroups" ItemName="CultureGroup" />
811 </WixAssignCulture>
812
813 <!-- Expand the culture groups then put them back into the appropriate property -->
814 <ItemGroup>
815 <_CulturedTargetPath Include="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetFileName)" />
816 <_CulturedTargetPdbPath Include="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" />
817 </ItemGroup>
818
819 <PropertyGroup>
820 <TargetPath>@(_CulturedTargetPath)</TargetPath>
821 <TargetPdbPath>@(_CulturedTargetPdbPath)</TargetPdbPath>
822 </PropertyGroup>
823 </Target>
824
825 <!--
826 ================================================================================================
827 ReadPreviousBindInputsAndBuiltOutputs
828
829 Reads a previous build's Bind contents and built outputs file into @(_BindInputs) and
830 @(_BindBuiltOutputs) respectively.
831
832 Note: Only the *built* outputs are used because using files copied to output folder
833 can cause perpetual incremental build.
834
835 Imagine the case where you have: Msi.wixproj -> Lib.wixproj -> Exe.csproj. The
836 Exe.csproj cannot be both an input to Lib.wixproj and an output of Msi.wixproj
837 (as an uncompressed file) because the Lib.wixproj will always newer than the
838 Exe.csproj.
839
840 [IN]
841
842 [OUT]
843 @(_BindInputs) - the content files required to bind (i.e. the Binary/@SourceFile and File/@Source files).
844 @(_BindBuiltOutputs) - the previously built .msi, .msm, .pcp, .exe .wixpdb, .cabs, etc.
845 Does not include content copied to output folder.
846 ================================================================================================
847 -->
848 <Target
849 Name="ReadPreviousBindInputsAndBuiltOutputs">
850
851 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)">
852 <Output TaskParameter="Lines" ItemName="_BindInputs" />
853 </ReadLinesFromFile>
854
855 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)">
856 <Output TaskParameter="Lines" ItemName="_BindBuiltOutputs" />
857 </ReadLinesFromFile>
858
859 <Message Importance="low" Text="Previous bind inputs: @(_BindInputs)" />
860 <Message Importance="low" Text="Previous bind outputs: @(_BindBuiltOutputs)" />
861 </Target>
862
863 <!--
864 ================================================================================================
865 UpdateLinkFileWrites
866
867 Reads the bind outputs file(s) output generated during WixBuild to correctly set the @(FileWrites)
868 item. Most targets have it easy because they can do a static mapping from inputs to the outputs.
869 However, the WixBuild target outputs are determined after a rather complex calculation we call
870 linking and binding!
871
872 This target runs independently after Link to ensure that @(FileWrites) is updated even if the
873 "WixBuild" task fails.
874
875 [IN]
876 Path to bind outputs file(s).
877
878 [OUT]
879 @(FileWrites) updated with outputs from bind.
880 ================================================================================================
881 -->
882 <Target
883 Name="UpdateLinkFileWrites">
884
885 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)">
886 <Output TaskParameter="Lines" ItemName="FileWrites"/>
887 </ReadLinesFromFile>
888
889 <ItemGroup>
890 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)') " />
891 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)') " />
892 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)') " />
893 </ItemGroup>
894
895 <Message Importance="low" Text="Build files after link: @(FileWrites)" />
896 </Target>
897
898 <!--
899 //////////////////////////////////////////////////////////////////////////////////////////////////
900 //////////////////////////////////////////////////////////////////////////////////////////////////
901 AllProjectOutputGroups Section
902 //////////////////////////////////////////////////////////////////////////////////////////////////
903 //////////////////////////////////////////////////////////////////////////////////////////////////
904 -->
905
906 <!--
907 ==================================================================================================
908 AllProjectOutputGroups - OVERRIDE Target
909
910 ==================================================================================================
911 -->
912 <Target
913 Name="AllProjectOutputGroups"
914 DependsOnTargets="
915 BuiltProjectOutputGroup;
916 DebugSymbolsProjectOutputGroup;
917 SourceFilesProjectOutputGroup;
918 ContentFilesProjectOutputGroup" />
919
920 <!--
921 This is the key output for the BuiltProjectOutputGroup and is meant to be read directly from the IDE.
922 Reading an item is faster than invoking a target.
923 -->
924 <ItemGroup>
925 <BuiltProjectOutputGroupKeyOutput Include="$(TargetPath)">
926 <IsKeyOutput>true</IsKeyOutput>
927 <FinalOutputPath>$(TargetPath)</FinalOutputPath>
928 <TargetPath>$(TargetFileName)</TargetPath>
929 </BuiltProjectOutputGroupKeyOutput>
930 </ItemGroup>
931
932 <!--
933 ==================================================================================================
934 BuiltProjectOutputGroup - OVERRIDE Target
935 ==================================================================================================
936 -->
937 <PropertyGroup>
938 <BuiltProjectOutputGroupDependsOn>PrepareForBuild;AssignTargetPaths</BuiltProjectOutputGroupDependsOn>
939 </PropertyGroup>
940 <Target
941 Name="BuiltProjectOutputGroup"
942 Outputs="@(BuiltProjectOutputGroupOutput)"
943 DependsOnTargets="$(BuiltProjectOutputGroupDependsOn)">
944
945 <!-- Don't add BuiltProjectOutputGroupKeyOutput - to avoid duplicates, we only want to get the updated list of TargetPaths from the TargetPath property below -->
946
947 <!-- Try to read the outputs from the bind outputs text file since that's the output list straight from linker. -->
948 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)">
949 <Output TaskParameter="Lines" ItemName="_BuiltProjectOutputGroupOutputIntermediate"/>
950 </ReadLinesFromFile>
951
952 <!-- If we didn't get anything from the bind outputs text file, default to the target path. -->
953 <ItemGroup Condition=" '@(_BuiltProjectOutputGroupOutputIntermediate)'=='' ">
954 <_BuiltProjectOutputGroupOutputIntermediate Include="$(TargetPath)" />
955 </ItemGroup>
956
957 <!-- Convert intermediate items into final items; this way we can get the full path for each item -->
958 <ItemGroup>
959 <BuiltProjectOutputGroupOutput Include="@(_BuiltProjectOutputGroupOutputIntermediate->'%(FullPath)')">
960 <!-- For compatibility with 2.0 -->
961 <OriginalItemSpec Condition="'%(_BuiltProjectOutputGroupOutputIntermediate.OriginalItemSpec)' == ''">%(_BuiltProjectOutputGroupOutputIntermediate.FullPath)</OriginalItemSpec>
962 </BuiltProjectOutputGroupOutput>
963 </ItemGroup>
964 </Target>
965
966 <!--
967 ==================================================================================================
968 DebugSymbolsProjectOutputGroup
969
970 Populates the Debug Symbols project output group.
971 ==================================================================================================
972 -->
973 <PropertyGroup>
974 <DebugSymbolsProjectOutputGroupDependsOn>AssignTargetPaths</DebugSymbolsProjectOutputGroupDependsOn>
975 </PropertyGroup>
976 <Target
977 Name="DebugSymbolsProjectOutputGroup"
978 Outputs="@(DebugSymbolsProjectOutputGroupOutput)"
979 DependsOnTargets="$(DebugSymbolsProjectOutputGroupDependsOn)">
980
981 <!-- Include build output pdb(s). Different than predefined itemgroup since AssignTargetPaths target may change -->
982 <ItemGroup>
983 <DebugSymbolsProjectOutputGroupOutput Include="$(TargetPdbPath)" Condition=" '$(SuppressPdbOutput)' != 'true' "/>
984 </ItemGroup>
985 </Target>
986
987
988 <!--
989 ==================================================================================================
990 CopyFilesToOutputDirectory - OVERRIDE Target
991
992 Copy all build outputs, satellites and other necessary files to the final directory.
993 ============================================================
994 -->
995 <Target
996 Name="CopyFilesToOutputDirectory">
997
998 <PropertyGroup>
999 <!-- By default we're using hard links to copy to the output directory, disabling this could slow the build significantly -->
1000 <CreateHardLinksForCopyFilesToOutputDirectoryIfPossible Condition=" '$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)' == '' ">true</CreateHardLinksForCopyFilesToOutputDirectoryIfPossible>
1001 </PropertyGroup>
1002
1003 <PropertyGroup>
1004 <CopyBuildOutputToOutputDirectory Condition="'$(CopyBuildOutputToOutputDirectory)'==''">true</CopyBuildOutputToOutputDirectory>
1005 <CopyOutputSymbolsToOutputDirectory Condition="'$(CopyOutputSymbolsToOutputDirectory)'==''">true</CopyOutputSymbolsToOutputDirectory>
1006 <FullIntermediateOutputPath>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)))</FullIntermediateOutputPath>
1007 </PropertyGroup>
1008
1009 <!-- Copy the bound files. -->
1010 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)">
1011 <Output TaskParameter="Lines" ItemName="_FullPathToCopy"/>
1012 </ReadLinesFromFile>
1013
1014 <ItemGroup>
1015 <_FullPathToCopy Include="$(OutputFile)" Condition=" '@(_FullPathToCopy)'=='' " />
1016 <_RelativePath Include="$([MSBuild]::MakeRelative($(FullIntermediateOutputPath), %(_FullPathToCopy.Identity)))" />
1017 </ItemGroup>
1018
1019 <Copy
1020 SourceFiles="@(_RelativePath->'$(IntermediateOutputPath)%(Identity)')"
1021 DestinationFiles="@(_RelativePath->'$(OutDir)%(Identity)')"
1022 SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
1023 OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
1024 Retries="$(CopyRetryCount)"
1025 RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
1026 UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
1027 Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'"
1028 >
1029
1030 <Output TaskParameter="DestinationFiles" ItemName="MainAssembly"/>
1031 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
1032
1033 </Copy>
1034
1035 <Message Importance="High" Text="$(MSBuildProjectName) -&gt; $(TargetPath)" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)'!='true'" />
1036 <!--<Message Importance="High" Text="$(MSBuildProjectName) -&gt; @(MainAssembly->'%(FullPath)')" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)'!='true'" />-->
1037
1038 <!-- Copy the debug information file (.pdb), if any
1039 <Copy
1040 SourceFiles="@(_DebugSymbolsIntermediatePath)"
1041 DestinationFiles="@(_DebugSymbolsOutputPath)"
1042 SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
1043 OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
1044 Retries="$(CopyRetryCount)"
1045 RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
1046 UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
1047 Condition="'$(_DebugSymbolsProduced)'=='true' and '$(SkipCopyingSymbolsToOutputDirectory)' != 'true' and '$(CopyOutputSymbolsToOutputDirectory)'=='true'">
1048
1049 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
1050
1051 </Copy>
1052 -->
1053 </Target>
1054
1055
1056 <Import Project="$(WixHarvestTargetsPath)" Condition=" '$(WixHarvestTargetsPath)' != '' and Exists('$(WixHarvestTargetsPath)')" />
1057 <Import Project="$(WixSigningTargetsPath)" Condition=" '$(WixSigningTargetsPath)' != '' and Exists('$(WixSigningTargetsPath)')" />
1058 <Import Project="$(LuxTargetsPath)" Condition=" '$(LuxTargetsPath)' != '' and Exists('$(LuxTargetsPath)')" />
1059
1060 <!-- Extension point: Define CustomAfterWixTargets to a .targets file that you want to include after this file. -->
1061 <Import Project="$(CustomAfterWixTargets)" Condition=" '$(CustomAfterWixTargets)' != '' and Exists('$(CustomAfterWixTargets)')" />
1062
1063</Project>