aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/build_all.cmd8
-rw-r--r--src/clean.cmd1
-rw-r--r--src/ext/Bal/bal.cmd2
-rw-r--r--src/ext/Bal/test/examples/EarliestCoreBundleSCD/EarliestCoreBundleSCD.wixproj4
-rw-r--r--src/ext/Bal/test/examples/EarliestCoreBundleTrimmedSCD/EarliestCoreBundleTrimmedSCD.wixproj4
-rw-r--r--src/ext/Bal/test/examples/LatestCoreBundleSCD/LatestCoreBundleSCD.wixproj4
-rw-r--r--src/ext/Bal/test/examples/LatestCoreBundleTrimmedSCD/LatestCoreBundleTrimmedSCD.wixproj4
-rw-r--r--src/ext/Bal/test/examples/examples.proj19
-rw-r--r--src/internal/SetBuildNumber/Directory.Packages.props.pp2
-rw-r--r--src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs (renamed from src/wix/test/WixToolsetTest.Sdk/MsbuildUtilities.cs)16
-rw-r--r--src/test/burn/TestData/Manual/BundleB/BundleB.wixproj1
-rw-r--r--src/testresultfilelist.txt2
-rw-r--r--src/tools/Directory.Build.props4
-rw-r--r--src/tools/WixToolset.Heat/WixToolset.Heat.csproj12
-rw-r--r--src/tools/WixToolset.Heat/WixToolset.Heat.nuspec20
-rw-r--r--src/tools/WixToolset.Heat/WixToolset.Heat.targets (renamed from src/wix/WixToolset.Sdk/tools/wix.harvest.targets)29
-rw-r--r--src/tools/WixToolset.HeatTasks/HeatDirectory.cs47
-rw-r--r--src/tools/WixToolset.HeatTasks/HeatFile.cs44
-rw-r--r--src/tools/WixToolset.HeatTasks/HeatProject.cs (renamed from src/wix/WixToolset.BuildTasks/HeatProject.cs)56
-rw-r--r--src/tools/WixToolset.HeatTasks/HeatTask.cs176
-rw-r--r--src/tools/WixToolset.HeatTasks/RefreshBundleGeneratedFile.cs (renamed from src/wix/WixToolset.BuildTasks/RefreshBundleGeneratedFile.cs)57
-rw-r--r--src/tools/WixToolset.HeatTasks/RefreshGeneratedFile.cs (renamed from src/wix/WixToolset.BuildTasks/RefreshGeneratedFile.cs)52
-rw-r--r--src/tools/WixToolset.HeatTasks/RefreshTask.cs59
-rw-r--r--src/tools/WixToolset.HeatTasks/WixCommandLineBuilder.cs56
-rw-r--r--src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj17
-rw-r--r--src/tools/heat/AssemblyHarvester.cs (renamed from src/wix/heat/AssemblyHarvester.cs)0
-rw-r--r--src/tools/heat/ConsoleMessageListener.cs90
-rw-r--r--src/tools/heat/Data/HarvesterErrors.cs (renamed from src/wix/heat/Data/HarvesterErrors.cs)0
-rw-r--r--src/tools/heat/Data/HarvesterVerboses.cs (renamed from src/wix/heat/Data/HarvesterVerboses.cs)0
-rw-r--r--src/tools/heat/Data/HarvesterWarnings.cs (renamed from src/wix/heat/Data/HarvesterWarnings.cs)0
-rw-r--r--src/tools/heat/Data/HeatCommandLineOption.cs (renamed from src/wix/heat/Data/HeatCommandLineOption.cs)0
-rw-r--r--src/tools/heat/Data/IHeatCommandLine.cs (renamed from src/wix/heat/Data/IHeatCommandLine.cs)0
-rw-r--r--src/tools/heat/DirectoryHarvester.cs (renamed from src/wix/heat/DirectoryHarvester.cs)0
-rw-r--r--src/tools/heat/DllHarvester.cs (renamed from src/wix/heat/DllHarvester.cs)0
-rw-r--r--src/tools/heat/Extensibility/BaseHarvesterExtension.cs (renamed from src/wix/heat/Extensibility/BaseHarvesterExtension.cs)0
-rw-r--r--src/tools/heat/Extensibility/BaseHeatExtension.cs (renamed from src/wix/heat/Extensibility/BaseHeatExtension.cs)0
-rw-r--r--src/tools/heat/Extensibility/BaseMutatorExtension.cs (renamed from src/wix/heat/Extensibility/BaseMutatorExtension.cs)0
-rw-r--r--src/tools/heat/Extensibility/IHarvester.cs (renamed from src/wix/heat/Extensibility/IHarvester.cs)0
-rw-r--r--src/tools/heat/Extensibility/IHarvesterCore.cs (renamed from src/wix/heat/Extensibility/IHarvesterCore.cs)0
-rw-r--r--src/tools/heat/Extensibility/IHarvesterExtension.cs (renamed from src/wix/heat/Extensibility/IHarvesterExtension.cs)0
-rw-r--r--src/tools/heat/Extensibility/IHeatCore.cs (renamed from src/wix/heat/Extensibility/IHeatCore.cs)0
-rw-r--r--src/tools/heat/Extensibility/IHeatExtension.cs (renamed from src/wix/heat/Extensibility/IHeatExtension.cs)0
-rw-r--r--src/tools/heat/Extensibility/IMutator.cs (renamed from src/wix/heat/Extensibility/IMutator.cs)0
-rw-r--r--src/tools/heat/Extensibility/IMutatorExtension.cs (renamed from src/wix/heat/Extensibility/IMutatorExtension.cs)0
-rw-r--r--src/tools/heat/FileHarvester.cs (renamed from src/wix/heat/FileHarvester.cs)0
-rw-r--r--src/tools/heat/Harvester.cs (renamed from src/wix/heat/Harvester.cs)0
-rw-r--r--src/tools/heat/HarvesterCore.cs (renamed from src/wix/heat/HarvesterCore.cs)0
-rw-r--r--src/tools/heat/HeatCommand.cs (renamed from src/wix/heat/HeatCommand.cs)0
-rw-r--r--src/tools/heat/HeatCommandLine.cs (renamed from src/wix/heat/HeatCommandLine.cs)0
-rw-r--r--src/tools/heat/HeatCommandLineFactory.cs (renamed from src/wix/heat/HeatCommandLineFactory.cs)0
-rw-r--r--src/tools/heat/HeatCore.cs (renamed from src/wix/heat/HeatCore.cs)0
-rw-r--r--src/tools/heat/HelpCommand.cs (renamed from src/wix/heat/HelpCommand.cs)0
-rw-r--r--src/tools/heat/IIsFinalizeHarvesterMutator.cs (renamed from src/wix/heat/IIsFinalizeHarvesterMutator.cs)0
-rw-r--r--src/tools/heat/IIsHarvesterMutator.cs (renamed from src/wix/heat/IIsHarvesterMutator.cs)0
-rw-r--r--src/tools/heat/IIsHeatExtension.cs (renamed from src/wix/heat/IIsHeatExtension.cs)0
-rw-r--r--src/tools/heat/IIsWebSiteHarvester.cs (renamed from src/wix/heat/IIsWebSiteHarvester.cs)0
-rw-r--r--src/tools/heat/Mutator.cs (renamed from src/wix/heat/Mutator.cs)0
-rw-r--r--src/tools/heat/PerformanceCategoryHarvester.cs (renamed from src/wix/heat/PerformanceCategoryHarvester.cs)0
-rw-r--r--src/tools/heat/Program.cs (renamed from src/wix/heat/Program.cs)4
-rw-r--r--src/tools/heat/RegFileHarvester.cs (renamed from src/wix/heat/RegFileHarvester.cs)0
-rw-r--r--src/tools/heat/RegistryHarvester.cs (renamed from src/wix/heat/RegistryHarvester.cs)0
-rw-r--r--src/tools/heat/Serialize/CodeDomInterfaces.cs (renamed from src/wix/heat/Serialize/CodeDomInterfaces.cs)0
-rw-r--r--src/tools/heat/Serialize/CodeDomReader.cs (renamed from src/wix/heat/Serialize/CodeDomReader.cs)0
-rw-r--r--src/tools/heat/Serialize/ElementCollection.cs (renamed from src/wix/heat/Serialize/ElementCollection.cs)0
-rw-r--r--src/tools/heat/Serialize/WixHarvesterStrings.Designer.cs (renamed from src/wix/heat/Serialize/WixHarvesterStrings.Designer.cs)0
-rw-r--r--src/tools/heat/Serialize/WixHarvesterStrings.resx (renamed from src/wix/heat/Serialize/WixHarvesterStrings.resx)0
-rw-r--r--src/tools/heat/Serialize/iis.cs (renamed from src/wix/heat/Serialize/iis.cs)0
-rw-r--r--src/tools/heat/Serialize/util.cs (renamed from src/wix/heat/Serialize/util.cs)0
-rw-r--r--src/tools/heat/Serialize/vs.cs (renamed from src/wix/heat/Serialize/vs.cs)0
-rw-r--r--src/tools/heat/Serialize/wix.cs (renamed from src/wix/heat/Serialize/wix.cs)0
-rw-r--r--src/tools/heat/TypeLibraryHarvester.cs (renamed from src/wix/heat/TypeLibraryHarvester.cs)0
-rw-r--r--src/tools/heat/UtilFinalizeHarvesterMutator.cs (renamed from src/wix/heat/UtilFinalizeHarvesterMutator.cs)0
-rw-r--r--src/tools/heat/UtilHarvesterMutator.cs (renamed from src/wix/heat/UtilHarvesterMutator.cs)0
-rw-r--r--src/tools/heat/UtilHeatExtension.cs (renamed from src/wix/heat/UtilHeatExtension.cs)8
-rw-r--r--src/tools/heat/UtilMutator.cs (renamed from src/wix/heat/UtilMutator.cs)0
-rw-r--r--src/tools/heat/UtilTransformMutator.cs (renamed from src/wix/heat/UtilTransformMutator.cs)0
-rw-r--r--src/tools/heat/VSHeatExtension.cs (renamed from src/wix/heat/VSHeatExtension.cs)0
-rw-r--r--src/tools/heat/VSProjectHarvester.cs (renamed from src/wix/heat/VSProjectHarvester.cs)0
-rw-r--r--src/tools/heat/app.config (renamed from src/wix/heat/app.config)0
-rw-r--r--src/tools/heat/heat.csproj (renamed from src/wix/heat/heat.csproj)11
-rw-r--r--src/tools/heat/heat.exe.manifest (renamed from src/wix/heat/heat.exe.manifest)0
-rw-r--r--src/tools/heat/heat.net461.v3.ncrunchproject (renamed from src/wix/heat/heat.net461.v3.ncrunchproject)0
-rw-r--r--src/tools/heat/heat.netcoreapp2.1.v3.ncrunchproject (renamed from src/wix/heat/heat.netcoreapp2.1.v3.ncrunchproject)0
-rw-r--r--src/tools/publish_t.proj36
-rw-r--r--src/tools/test/Directory.Build.props10
-rw-r--r--src/tools/test/WixToolsetTest.Heat/HeatRunner.cs (renamed from src/wix/test/WixToolsetTest.Heat/HeatRunner.cs)0
-rw-r--r--src/tools/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj (renamed from src/wix/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj)5
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs (renamed from src/wix/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs)105
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/EnsureWixSdkCached/EnsureWixSdkCached.wixproj4
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj26
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/Package.wxs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/Package.wxs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/HeatFilePackage.wixproj21
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/Package.wxs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/Package.wxs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj18
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj18
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj (renamed from src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj)0
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.csproj28
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.v3.ncrunchproject5
-rw-r--r--src/tools/thmviewer/thmviewer.v3.ncrunchproject1
-rw-r--r--src/tools/tools.cmd29
-rw-r--r--src/tools/tools.sln52
-rw-r--r--src/tools/tools.v3.ncrunchsolution6
-rw-r--r--src/wix/WixToolset.BuildTasks/HeatDirectory.cs96
-rw-r--r--src/wix/WixToolset.BuildTasks/HeatFile.cs88
-rw-r--r--src/wix/WixToolset.BuildTasks/HeatTask.cs91
-rw-r--r--src/wix/WixToolset.BuildTasks/HeatTask_InProc.cs20
-rw-r--r--src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj1
-rw-r--r--src/wix/WixToolset.Sdk/tools/wix.targets2
-rw-r--r--src/wix/publish_t.proj3
-rw-r--r--src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj2
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs38
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj58
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/HeatFilePackage.wixproj53
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj50
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj50
-rw-r--r--src/wix/wix.cmd6
-rw-r--r--src/wix/wix.sln37
124 files changed, 991 insertions, 777 deletions
diff --git a/src/build_all.cmd b/src/build_all.cmd
index 60502cdc..ce1c08f0 100644
--- a/src/build_all.cmd
+++ b/src/build_all.cmd
@@ -44,14 +44,14 @@ call burn\burn.cmd %_C% || exit /b
44call wix\wix.cmd %_C% || exit /b 44call wix\wix.cmd %_C% || exit /b
45 45
46 46
47:: ext 47:: tools
48 48
49call ext\ext.cmd %_C% || exit /b 49call tools\tools.cmd %_C% || exit /b
50 50
51 51
52:: tools 52:: ext
53 53
54call tools\tools.cmd %_C% || exit /b 54call ext\ext.cmd %_C% || exit /b
55 55
56 56
57:: integration tests 57:: integration tests
diff --git a/src/clean.cmd b/src/clean.cmd
index 9eccf22a..2bbc2a78 100644
--- a/src/clean.cmd
+++ b/src/clean.cmd
@@ -39,6 +39,7 @@ if exist "%_NUGET_CACHE%\wixtoolset.dtf.resources" rd /s/q "%_NUGET_CACHE%\wixto
39if exist "%_NUGET_CACHE%\wixtoolset.dtf.windowsinstaller" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.windowsinstaller" 39if exist "%_NUGET_CACHE%\wixtoolset.dtf.windowsinstaller" rd /s/q "%_NUGET_CACHE%\wixtoolset.dtf.windowsinstaller"
40if exist "%_NUGET_CACHE%\wixtoolset.dutil" rd /s/q "%_NUGET_CACHE%\wixtoolset.dutil" 40if exist "%_NUGET_CACHE%\wixtoolset.dutil" rd /s/q "%_NUGET_CACHE%\wixtoolset.dutil"
41if exist "%_NUGET_CACHE%\wixtoolset.extensibility" rd /s/q "%_NUGET_CACHE%\wixtoolset.extensibility" 41if exist "%_NUGET_CACHE%\wixtoolset.extensibility" rd /s/q "%_NUGET_CACHE%\wixtoolset.extensibility"
42if exist "%_NUGET_CACHE%\wixtoolset.heat" rd /s/q "%_NUGET_CACHE%\wixtoolset.heat"
42if exist "%_NUGET_CACHE%\wixtoolset.mba.core" rd /s/q "%_NUGET_CACHE%\wixtoolset.mba.core" 43if exist "%_NUGET_CACHE%\wixtoolset.mba.core" rd /s/q "%_NUGET_CACHE%\wixtoolset.mba.core"
43if exist "%_NUGET_CACHE%\wixtoolset.netfx.wixext" rd /s/q "%_NUGET_CACHE%\wixtoolset.netfx.wixext" 44if exist "%_NUGET_CACHE%\wixtoolset.netfx.wixext" rd /s/q "%_NUGET_CACHE%\wixtoolset.netfx.wixext"
44if exist "%_NUGET_CACHE%\wixtoolset.sdk" rd /s/q "%_NUGET_CACHE%\wixtoolset.sdk" 45if exist "%_NUGET_CACHE%\wixtoolset.sdk" rd /s/q "%_NUGET_CACHE%\wixtoolset.sdk"
diff --git a/src/ext/Bal/bal.cmd b/src/ext/Bal/bal.cmd
index aedf9b64..060f8ee0 100644
--- a/src/ext/Bal/bal.cmd
+++ b/src/ext/Bal/bal.cmd
@@ -22,7 +22,7 @@ msbuild -p:Configuration=%_C% || exit /b
22 22
23dotnet test test\WixToolsetTest.Dnc.HostGenerator -c %_C% --nologo --no-build -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Dnc.HostGenerator.trx" || exit /b 23dotnet test test\WixToolsetTest.Dnc.HostGenerator -c %_C% --nologo --no-build -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Dnc.HostGenerator.trx" || exit /b
24 24
25msbuild -p:Configuration=%_C% test\examples\examples.proj || exit /b 25msbuild -Restore -p:Configuration=%_C% test\examples\examples.proj -bl || exit /b
26 26
27:: Test 27:: Test
28dotnet test test\WixToolsetTest.Bal -c %_C% --no-build -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Bal.trx" || exit /b 28dotnet test test\WixToolsetTest.Bal -c %_C% --no-build -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Bal.trx" || exit /b
diff --git a/src/ext/Bal/test/examples/EarliestCoreBundleSCD/EarliestCoreBundleSCD.wixproj b/src/ext/Bal/test/examples/EarliestCoreBundleSCD/EarliestCoreBundleSCD.wixproj
index ebeebff2..3f81710e 100644
--- a/src/ext/Bal/test/examples/EarliestCoreBundleSCD/EarliestCoreBundleSCD.wixproj
+++ b/src/ext/Bal/test/examples/EarliestCoreBundleSCD/EarliestCoreBundleSCD.wixproj
@@ -7,4 +7,8 @@
7 <Transforms>ba.xslt</Transforms> 7 <Transforms>ba.xslt</Transforms>
8 </HarvestDirectory> 8 </HarvestDirectory>
9 </ItemGroup> 9 </ItemGroup>
10
11 <ItemGroup>
12 <PackageReference Include="WixToolset.Heat" />
13 </ItemGroup>
10</Project> 14</Project>
diff --git a/src/ext/Bal/test/examples/EarliestCoreBundleTrimmedSCD/EarliestCoreBundleTrimmedSCD.wixproj b/src/ext/Bal/test/examples/EarliestCoreBundleTrimmedSCD/EarliestCoreBundleTrimmedSCD.wixproj
index a6b56460..f9926550 100644
--- a/src/ext/Bal/test/examples/EarliestCoreBundleTrimmedSCD/EarliestCoreBundleTrimmedSCD.wixproj
+++ b/src/ext/Bal/test/examples/EarliestCoreBundleTrimmedSCD/EarliestCoreBundleTrimmedSCD.wixproj
@@ -7,4 +7,8 @@
7 <Transforms>ba.xslt</Transforms> 7 <Transforms>ba.xslt</Transforms>
8 </HarvestDirectory> 8 </HarvestDirectory>
9 </ItemGroup> 9 </ItemGroup>
10
11 <ItemGroup>
12 <PackageReference Include="WixToolset.Heat" />
13 </ItemGroup>
10</Project> 14</Project>
diff --git a/src/ext/Bal/test/examples/LatestCoreBundleSCD/LatestCoreBundleSCD.wixproj b/src/ext/Bal/test/examples/LatestCoreBundleSCD/LatestCoreBundleSCD.wixproj
index 30a860ab..048e3c97 100644
--- a/src/ext/Bal/test/examples/LatestCoreBundleSCD/LatestCoreBundleSCD.wixproj
+++ b/src/ext/Bal/test/examples/LatestCoreBundleSCD/LatestCoreBundleSCD.wixproj
@@ -7,4 +7,8 @@
7 <Transforms>ba.xslt</Transforms> 7 <Transforms>ba.xslt</Transforms>
8 </HarvestDirectory> 8 </HarvestDirectory>
9 </ItemGroup> 9 </ItemGroup>
10
11 <ItemGroup>
12 <PackageReference Include="WixToolset.Heat" />
13 </ItemGroup>
10</Project> 14</Project>
diff --git a/src/ext/Bal/test/examples/LatestCoreBundleTrimmedSCD/LatestCoreBundleTrimmedSCD.wixproj b/src/ext/Bal/test/examples/LatestCoreBundleTrimmedSCD/LatestCoreBundleTrimmedSCD.wixproj
index 5ce89b64..056bf2bb 100644
--- a/src/ext/Bal/test/examples/LatestCoreBundleTrimmedSCD/LatestCoreBundleTrimmedSCD.wixproj
+++ b/src/ext/Bal/test/examples/LatestCoreBundleTrimmedSCD/LatestCoreBundleTrimmedSCD.wixproj
@@ -7,4 +7,8 @@
7 <Transforms>ba.xslt</Transforms> 7 <Transforms>ba.xslt</Transforms>
8 </HarvestDirectory> 8 </HarvestDirectory>
9 </ItemGroup> 9 </ItemGroup>
10
11 <ItemGroup>
12 <PackageReference Include="WixToolset.Heat" />
13 </ItemGroup>
10</Project> 14</Project>
diff --git a/src/ext/Bal/test/examples/examples.proj b/src/ext/Bal/test/examples/examples.proj
index 82a5e3c1..855f0ef5 100644
--- a/src/ext/Bal/test/examples/examples.proj
+++ b/src/ext/Bal/test/examples/examples.proj
@@ -2,8 +2,7 @@
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. --> 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 3
4 4
5<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 5<Project Sdk="Microsoft.Build.Traversal">
6 <Import Project="..\..\Directory.Build.props" />
7 6
8 <PropertyGroup> 7 <PropertyGroup>
9 <EarliestCoreMBAProjectPath>EarliestCoreMBA\Example.EarliestCoreMBA.csproj</EarliestCoreMBAProjectPath> 8 <EarliestCoreMBAProjectPath>EarliestCoreMBA\Example.EarliestCoreMBA.csproj</EarliestCoreMBAProjectPath>
@@ -28,14 +27,12 @@
28 <SkipFDDx86>true</SkipFDDx86> 27 <SkipFDDx86>true</SkipFDDx86>
29 <SkipSCD>true</SkipSCD> 28 <SkipSCD>true</SkipSCD>
30 </CoreMBAProject> 29 </CoreMBAProject>
31 30
32 <FullMBAProject Include="$(FullFramework2MBAProjectPath)" /> 31 <FullMBAProject Include="$(FullFramework2MBAProjectPath)" />
33 <FullMBAProject Include="$(FullFramework4MBAProjectPath)" /> 32 <FullMBAProject Include="$(FullFramework4MBAProjectPath)" />
34
35 <ExampleBundleProject Include="**\*.wixproj" />
36 </ItemGroup> 33 </ItemGroup>
37 34
38 <Target Name="PublishCoreExamples"> 35 <Target Name="PublishCoreExamples" BeforeTargets="Build">
39 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\fdd-x86" -r win-x86 -c $(Configuration) --self-contained false "%(CoreMBAProject.Identity)"' 36 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\fdd-x86" -r win-x86 -c $(Configuration) --self-contained false "%(CoreMBAProject.Identity)"'
40 Condition="'%(CoreMBAProject.SkipFDDx86)'==''" /> 37 Condition="'%(CoreMBAProject.SkipFDDx86)'==''" />
41 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\fdd" -r win-x64 -c $(Configuration) --self-contained false "%(CoreMBAProject.Identity)"' 38 <Exec Command='dotnet publish -o "%(CoreMBAProject.PublishPath)\fdd" -r win-x64 -c $(Configuration) --self-contained false "%(CoreMBAProject.Identity)"'
@@ -46,9 +43,7 @@
46 Condition="'%(CoreMBAProject.TrimMode)'!=''" /> 43 Condition="'%(CoreMBAProject.TrimMode)'!=''" />
47 </Target> 44 </Target>
48 45
49 <Target Name="Build" DependsOnTargets="PublishCoreExamples"> 46 <ItemGroup>
50 <MSBuild Projects="%(ExampleBundleProject.Identity)" /> 47 <ProjectReference Include="**\*.wixproj" />
51 </Target> 48 </ItemGroup>
52 49</Project>
53 <Import Project="..\..\..\..\Directory.Build.targets" />
54</Project> \ No newline at end of file
diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp
index 8cf4be1f..91337de7 100644
--- a/src/internal/SetBuildNumber/Directory.Packages.props.pp
+++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp
@@ -28,6 +28,8 @@
28 <PackageVersion Include="WixToolset.Core.WindowsInstaller" Version="{packageversion}" /> 28 <PackageVersion Include="WixToolset.Core.WindowsInstaller" Version="{packageversion}" />
29 <PackageVersion Include="WixToolset.Core.TestPackage" Version="{packageversion}" /> 29 <PackageVersion Include="WixToolset.Core.TestPackage" Version="{packageversion}" />
30 30
31 <PackageVersion Include="WixToolset.Heat" Version="{packageversion}" />
32
31 <PackageVersion Include="WixToolset.Bal.wixext" Version="{packageversion}" /> 33 <PackageVersion Include="WixToolset.Bal.wixext" Version="{packageversion}" />
32 <PackageVersion Include="WixToolset.Dependency.wixext" Version="{packageversion}" /> 34 <PackageVersion Include="WixToolset.Dependency.wixext" Version="{packageversion}" />
33 <PackageVersion Include="WixToolset.NetFx.wixext" Version="{packageversion}" /> 35 <PackageVersion Include="WixToolset.NetFx.wixext" Version="{packageversion}" />
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildUtilities.cs b/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs
index 028ea0cf..32680e5d 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildUtilities.cs
+++ b/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs
@@ -17,9 +17,6 @@ namespace WixToolsetTest.Sdk
17 17
18 public static class MsbuildUtilities 18 public static class MsbuildUtilities
19 { 19 {
20 public static readonly string WixMsbuildPath = Path.Combine(Path.GetDirectoryName(new Uri(typeof(MsbuildUtilities).Assembly.CodeBase).AbsolutePath), "..", "..", "..", "publish", "WixToolset.Sdk");
21 public static readonly string WixPropsPath = Path.Combine(WixMsbuildPath, "build", "WixToolset.Sdk.props");
22
23 public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null, string verbosityLevel = "normal", bool suppressValidation = true) 20 public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null, string verbosityLevel = "normal", bool suppressValidation = true)
24 { 21 {
25 var allArgs = new List<string> 22 var allArgs = new List<string>
@@ -27,7 +24,6 @@ namespace WixToolsetTest.Sdk
27 $"-verbosity:{verbosityLevel}", 24 $"-verbosity:{verbosityLevel}",
28 $"-p:Configuration={configuration}", 25 $"-p:Configuration={configuration}",
29 $"-p:SuppressValidation={suppressValidation}", 26 $"-p:SuppressValidation={suppressValidation}",
30 GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildUtilities.WixPropsPath),
31 // Node reuse means that child msbuild processes can stay around after the build completes. 27 // Node reuse means that child msbuild processes can stay around after the build completes.
32 // Under that scenario, the root msbuild does not reliably close its streams which causes us to hang. 28 // Under that scenario, the root msbuild does not reliably close its streams which causes us to hang.
33 "-nr:false", 29 "-nr:false",
@@ -74,11 +70,23 @@ namespace WixToolsetTest.Sdk
74 { 70 {
75 case BuildSystem.DotNetCoreSdk: 71 case BuildSystem.DotNetCoreSdk:
76 { 72 {
73 // If the value ends with a backslash, double-escape it (it should end up with four backslashes).
74 if (valueToQuote?.EndsWith("\\") == true)
75 {
76 valueToQuote += @"\\\";
77 }
78
77 return $"-p:{propertyName}=\\\"{valueToQuote}\\\""; 79 return $"-p:{propertyName}=\\\"{valueToQuote}\\\"";
78 } 80 }
79 case BuildSystem.MSBuild: 81 case BuildSystem.MSBuild:
80 case BuildSystem.MSBuild64: 82 case BuildSystem.MSBuild64:
81 { 83 {
84 // If the value ends with a backslash, escape it.
85 if (valueToQuote?.EndsWith("\\") == true)
86 {
87 valueToQuote += @"\";
88 }
89
82 return $"-p:{propertyName}=\"{valueToQuote}\""; 90 return $"-p:{propertyName}=\"{valueToQuote}\"";
83 } 91 }
84 default: 92 default:
diff --git a/src/test/burn/TestData/Manual/BundleB/BundleB.wixproj b/src/test/burn/TestData/Manual/BundleB/BundleB.wixproj
index 35c92246..bd6e222a 100644
--- a/src/test/burn/TestData/Manual/BundleB/BundleB.wixproj
+++ b/src/test/burn/TestData/Manual/BundleB/BundleB.wixproj
@@ -22,6 +22,7 @@
22 <ProjectReference Include="..\PackageA\PackageA.wixproj" /> 22 <ProjectReference Include="..\PackageA\PackageA.wixproj" />
23 </ItemGroup> 23 </ItemGroup>
24 <ItemGroup> 24 <ItemGroup>
25 <PackageReference Include="WixToolset.Heat" />
25 <PackageReference Include="WixToolset.Bal.wixext" /> 26 <PackageReference Include="WixToolset.Bal.wixext" />
26 </ItemGroup> 27 </ItemGroup>
27 <!-- We do this dynamically to avoid committing so many files to source control. --> 28 <!-- We do this dynamically to avoid committing so many files to source control. -->
diff --git a/src/testresultfilelist.txt b/src/testresultfilelist.txt
index fa3a0734..cdf6b00e 100644
--- a/src/testresultfilelist.txt
+++ b/src/testresultfilelist.txt
@@ -15,7 +15,7 @@ build/logs/TestResults/WixToolsetTest.Core.Burn.trx
15build/logs/TestResults/WixToolsetTest.Core.Native.trx 15build/logs/TestResults/WixToolsetTest.Core.Native.trx
16build/logs/TestResults/WixToolsetTest.CoreIntegration.trx 16build/logs/TestResults/WixToolsetTest.CoreIntegration.trx
17build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx 17build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx
18build/logs/TestResults/WixToolsetTest.Heat.trx 18build/logs/TestResults/WixToolsetTest.HeatTasks.trx
19build/logs/TestResults/WixToolsetTest.ManagedHost.trx 19build/logs/TestResults/WixToolsetTest.ManagedHost.trx
20build/logs/TestResults/WixToolsetTest.Mba.Core.trx 20build/logs/TestResults/WixToolsetTest.Mba.Core.trx
21build/logs/TestResults/WixToolsetTest.MsiE2E.trx 21build/logs/TestResults/WixToolsetTest.MsiE2E.trx
diff --git a/src/tools/Directory.Build.props b/src/tools/Directory.Build.props
index 3fdc6553..bfa668d6 100644
--- a/src/tools/Directory.Build.props
+++ b/src/tools/Directory.Build.props
@@ -7,4 +7,8 @@
7 </PropertyGroup> 7 </PropertyGroup>
8 8
9 <Import Project="..\Directory.Build.props" /> 9 <Import Project="..\Directory.Build.props" />
10
11 <PropertyGroup>
12 <PublishRoot>$(OutputPath)publish\</PublishRoot>
13 </PropertyGroup>
10</Project> 14</Project>
diff --git a/src/tools/WixToolset.Heat/WixToolset.Heat.csproj b/src/tools/WixToolset.Heat/WixToolset.Heat.csproj
new file mode 100644
index 00000000..a3e0eb41
--- /dev/null
+++ b/src/tools/WixToolset.Heat/WixToolset.Heat.csproj
@@ -0,0 +1,12 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
7 <Description>WiX Toolset Heat MSBuild integration</Description>
8 <PublishDir>$(PublishRoot)WixToolset.Heat\</PublishDir>
9 <NuspecFile>$(MSBuildThisFileName).nuspec</NuspecFile>
10 <NuspecBasePath>$(PublishDir)</NuspecBasePath>
11 </PropertyGroup>
12</Project>
diff --git a/src/tools/WixToolset.Heat/WixToolset.Heat.nuspec b/src/tools/WixToolset.Heat/WixToolset.Heat.nuspec
new file mode 100644
index 00000000..5242773b
--- /dev/null
+++ b/src/tools/WixToolset.Heat/WixToolset.Heat.nuspec
@@ -0,0 +1,20 @@
1<?xml version="1.0" encoding="utf-8"?>
2<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
3 <metadata>
4 <id>$id$</id>
5 <version>$version$</version>
6 <title>$title$</title>
7 <description>$description$</description>
8 <authors>$authors$</authors>
9 <license type="expression">MS-RL</license>
10 <requireLicenseAcceptance>false</requireLicenseAcceptance>
11 <copyright>$copyright$</copyright>
12 <projectUrl>$projectUrl$</projectUrl>
13 <repository type="$repositorytype$" url="$repositoryurl$" commit="$repositorycommit$" />
14 </metadata>
15
16 <files>
17 <file src="$projectFolder$\$id$.targets" target="build" />
18 <file src="tools\**\*" target="tools" />
19 </files>
20</package>
diff --git a/src/wix/WixToolset.Sdk/tools/wix.harvest.targets b/src/tools/WixToolset.Heat/WixToolset.Heat.targets
index 23e4a68e..ba854459 100644
--- a/src/wix/WixToolset.Sdk/tools/wix.harvest.targets
+++ b/src/tools/WixToolset.Heat/WixToolset.Heat.targets
@@ -5,16 +5,27 @@
5<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 5<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
6 <!-- These properties can be overridden to support non-default installations. --> 6 <!-- These properties can be overridden to support non-default installations. -->
7 <PropertyGroup> 7 <PropertyGroup>
8 <HeatToolDir Condition=" '$(HeatToolDir)' == '' ">$(WixToolDir)</HeatToolDir> 8 <WixHeatBinDir Condition=" '$(WixHeatBinDir)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">$(MSBuildThisFileDirectory)..\tools\netcoreapp3.1\</WixHeatBinDir>
9 <WixHeatBinDir Condition=" '$(WixHeatBinDir)' == '' ">$(MSBuildThisFileDirectory)..\tools\net472\</WixHeatBinDir>
10 <WixHeatTasksPath Condition=" '$(WixHeatTasksPath)' == '' ">$(WixHeatBinDir)WixToolset.HeatTasks.dll</WixHeatTasksPath>
11
12 <!--
13 For backwards compatibility, the MSBuild tasks always default to the x86 heat.exe even though a x64 heat.exe is available.
14 For "dotnet.exe build" the Heat tasks calculate the command-line to start heat.dll in .NET Core.
15 -->
16 <HeatToolDir Condition=" '$(HeatToolDir)' == '' and '$(MSBuildRuntimeType)' != 'Core' ">$(MSBuildThisFileDirectory)..\tools\net472\x86\</HeatToolDir>
17
18 <HeatExe Condition=" '$(HeatExe)' == '' ">$(MSBuildThisFileDirectory)..\tools\net472\x86\heat.exe</HeatExe>
19 <HeatExe64 Condition=" '$(HeatExe64)' == '' ">$(MSBuildThisFileDirectory)..\tools\net472\x64\heat.exe</HeatExe64>
9 </PropertyGroup> 20 </PropertyGroup>
10 21
11 <!-- These tasks are extensions for harvesting WiX source code from other sources. --> 22 <!-- These tasks are extensions for harvesting WiX source code from other sources. -->
12 <UsingTask TaskName="HeatFile" AssemblyFile="$(WixTasksPath)" /> 23 <UsingTask TaskName="HeatFile" AssemblyFile="$(WixHeatTasksPath)" />
13 <UsingTask TaskName="HeatDirectory" AssemblyFile="$(WixTasksPath)" /> 24 <UsingTask TaskName="HeatDirectory" AssemblyFile="$(WixHeatTasksPath)" />
14 <UsingTask TaskName="HeatProject" AssemblyFile="$(WixTasksPath)" /> 25 <UsingTask TaskName="HeatProject" AssemblyFile="$(WixHeatTasksPath)" />
15 26
16 <UsingTask TaskName="RefreshGeneratedFile" AssemblyFile="$(WixTasksPath)"/> 27 <UsingTask TaskName="RefreshGeneratedFile" AssemblyFile="$(WixHeatTasksPath)"/>
17 <UsingTask TaskName="RefreshBundleGeneratedFile" AssemblyFile="$(WixTasksPath)"/> 28 <UsingTask TaskName="RefreshBundleGeneratedFile" AssemblyFile="$(WixHeatTasksPath)"/>
18 29
19 <!-- Default Harvester properties--> 30 <!-- Default Harvester properties-->
20 <PropertyGroup> 31 <PropertyGroup>
@@ -278,8 +289,6 @@
278 GenerateWixVariables="$(HarvestProjectsGenerateWixVariables)" 289 GenerateWixVariables="$(HarvestProjectsGenerateWixVariables)"
279 UseToolsVersion="$(HarvestProjectsUseToolsVersion)" 290 UseToolsVersion="$(HarvestProjectsUseToolsVersion)"
280 AdditionalOptions="$(HarvestProjectsAdditionalOptions)" 291 AdditionalOptions="$(HarvestProjectsAdditionalOptions)"
281 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
282 ToolExe="$(HeatToolExe)"
283 ToolPath="$(HeatToolDir)"> 292 ToolPath="$(HeatToolDir)">
284 293
285 <Output TaskParameter="OutputFile" ItemName="Compile" /> 294 <Output TaskParameter="OutputFile" ItemName="Compile" />
@@ -366,8 +375,6 @@
366 SuppressRootDirectory="%(HarvestDirectory.SuppressRootDirectory)" 375 SuppressRootDirectory="%(HarvestDirectory.SuppressRootDirectory)"
367 SuppressRegistry="%(HarvestDirectory.SuppressRegistry)" 376 SuppressRegistry="%(HarvestDirectory.SuppressRegistry)"
368 AdditionalOptions="$(HarvestDirectoryAdditionalOptions)" 377 AdditionalOptions="$(HarvestDirectoryAdditionalOptions)"
369 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
370 ToolExe="$(HeatToolExe)"
371 ToolPath="$(HeatToolDir)"> 378 ToolPath="$(HeatToolDir)">
372 379
373 <Output TaskParameter="OutputFile" ItemName="Compile" /> 380 <Output TaskParameter="OutputFile" ItemName="Compile" />
@@ -442,8 +449,6 @@
442 SuppressRegistry="%(HarvestFile.SuppressRegistry)" 449 SuppressRegistry="%(HarvestFile.SuppressRegistry)"
443 SuppressRootDirectory="%(HarvestFile.SuppressRootDirectory)" 450 SuppressRootDirectory="%(HarvestFile.SuppressRootDirectory)"
444 AdditionalOptions="$(HarvestFileAdditionalOptions)" 451 AdditionalOptions="$(HarvestFileAdditionalOptions)"
445 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
446 ToolExe="$(HeatToolExe)"
447 ToolPath="$(HeatToolDir)"> 452 ToolPath="$(HeatToolDir)">
448 453
449 <Output TaskParameter="OutputFile" ItemName="Compile" /> 454 <Output TaskParameter="OutputFile" ItemName="Compile" />
diff --git a/src/tools/WixToolset.HeatTasks/HeatDirectory.cs b/src/tools/WixToolset.HeatTasks/HeatDirectory.cs
new file mode 100644
index 00000000..8a169055
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/HeatDirectory.cs
@@ -0,0 +1,47 @@
1// 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.
2
3namespace WixToolset.HeatTasks
4{
5 using Microsoft.Build.Framework;
6
7 public sealed class HeatDirectory : HeatTask
8 {
9 public string ComponentGroupName { get; set; }
10
11 [Required]
12 public string Directory { get; set; }
13
14 public string DirectoryRefId { get; set; }
15
16 public bool KeepEmptyDirectories { get; set; }
17
18 public string PreprocessorVariable { get; set; }
19
20 public bool SuppressCom { get; set; }
21
22 public bool SuppressRootDirectory { get; set; }
23
24 public bool SuppressRegistry { get; set; }
25
26 public string Template { get; set; }
27
28 protected override string OperationName => "dir";
29
30 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
31 {
32 commandLineBuilder.AppendSwitch(this.OperationName);
33 commandLineBuilder.AppendFileNameIfNotNull(this.Directory);
34
35 commandLineBuilder.AppendSwitchIfNotNull("-cg ", this.ComponentGroupName);
36 commandLineBuilder.AppendSwitchIfNotNull("-dr ", this.DirectoryRefId);
37 commandLineBuilder.AppendIfTrue("-ke", this.KeepEmptyDirectories);
38 commandLineBuilder.AppendIfTrue("-scom", this.SuppressCom);
39 commandLineBuilder.AppendIfTrue("-sreg", this.SuppressRegistry);
40 commandLineBuilder.AppendIfTrue("-srd", this.SuppressRootDirectory);
41 commandLineBuilder.AppendSwitchIfNotNull("-template ", this.Template);
42 commandLineBuilder.AppendSwitchIfNotNull("-var ", this.PreprocessorVariable);
43
44 base.BuildCommandLine(commandLineBuilder);
45 }
46 }
47}
diff --git a/src/tools/WixToolset.HeatTasks/HeatFile.cs b/src/tools/WixToolset.HeatTasks/HeatFile.cs
new file mode 100644
index 00000000..83cbc4d1
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/HeatFile.cs
@@ -0,0 +1,44 @@
1// 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.
2
3namespace WixToolset.HeatTasks
4{
5 using Microsoft.Build.Framework;
6
7 public sealed class HeatFile : HeatTask
8 {
9 public string ComponentGroupName { get; set; }
10
11 public string DirectoryRefId { get; set; }
12
13 [Required]
14 public string File { get; set; }
15
16 public string PreprocessorVariable { get; set; }
17
18 public bool SuppressCom { get; set; }
19
20 public bool SuppressRegistry { get; set; }
21
22 public bool SuppressRootDirectory { get; set; }
23
24 public string Template { get; set; }
25
26 protected override string OperationName => "file";
27
28 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
29 {
30 commandLineBuilder.AppendSwitch(this.OperationName);
31 commandLineBuilder.AppendFileNameIfNotNull(this.File);
32
33 commandLineBuilder.AppendSwitchIfNotNull("-cg ", this.ComponentGroupName);
34 commandLineBuilder.AppendSwitchIfNotNull("-dr ", this.DirectoryRefId);
35 commandLineBuilder.AppendIfTrue("-scom", this.SuppressCom);
36 commandLineBuilder.AppendIfTrue("-srd", this.SuppressRootDirectory);
37 commandLineBuilder.AppendIfTrue("-sreg", this.SuppressRegistry);
38 commandLineBuilder.AppendSwitchIfNotNull("-template ", this.Template);
39 commandLineBuilder.AppendSwitchIfNotNull("-var ", this.PreprocessorVariable);
40
41 base.BuildCommandLine(commandLineBuilder);
42 }
43 }
44}
diff --git a/src/wix/WixToolset.BuildTasks/HeatProject.cs b/src/tools/WixToolset.HeatTasks/HeatProject.cs
index 3833a754..d54f6ad1 100644
--- a/src/wix/WixToolset.BuildTasks/HeatProject.cs
+++ b/src/tools/WixToolset.HeatTasks/HeatProject.cs
@@ -1,64 +1,29 @@
1// 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. 1// 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.
2 2
3namespace WixToolset.BuildTasks 3namespace WixToolset.HeatTasks
4{ 4{
5 using Microsoft.Build.Framework; 5 using Microsoft.Build.Framework;
6 6
7 public sealed class HeatProject : HeatTask 7 public sealed class HeatProject : HeatTask
8 { 8 {
9 private string configuration;
10 private string directoryIds;
11 private string generateType;
12 private bool generateWixVariables;
13 private string platform;
14 private string project;
15 private string projectName;
16 private string[] projectOutputGroups; 9 private string[] projectOutputGroups;
17 10
18 public string Configuration 11 public string Configuration { get; set; }
19 {
20 get { return this.configuration; }
21 set { this.configuration = value; }
22 }
23 12
24 public string DirectoryIds 13 public string DirectoryIds { get; set; }
25 {
26 get { return this.directoryIds; }
27 set { this.directoryIds = value; }
28 }
29 14
30 public bool GenerateWixVariables 15 public bool GenerateWixVariables { get; set; }
31 {
32 get { return this.generateWixVariables; }
33 set { this.generateWixVariables = value; }
34 }
35 16
36 public string GenerateType 17 public string GenerateType { get; set; }
37 {
38 get { return this.generateType; }
39 set { this.generateType = value; }
40 }
41 18
42 public string MsbuildBinPath { get; set; } 19 public string MsbuildBinPath { get; set; }
43 20
44 public string Platform 21 public string Platform { get; set; }
45 {
46 get { return this.platform; }
47 set { this.platform = value; }
48 }
49 22
50 [Required] 23 [Required]
51 public string Project 24 public string Project { get; set; }
52 {
53 get { return this.project; }
54 set { this.project = value; }
55 }
56 25
57 public string ProjectName 26 public string ProjectName { get; set; }
58 {
59 get { return this.projectName; }
60 set { this.projectName = value; }
61 }
62 27
63 public string[] ProjectOutputGroups 28 public string[] ProjectOutputGroups
64 { 29 {
@@ -81,10 +46,7 @@ namespace WixToolset.BuildTasks
81 46
82 public bool UseToolsVersion { get; set; } 47 public bool UseToolsVersion { get; set; }
83 48
84 protected override string OperationName 49 protected override string OperationName => "project";
85 {
86 get { return "project"; }
87 }
88 50
89 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder) 51 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
90 { 52 {
diff --git a/src/tools/WixToolset.HeatTasks/HeatTask.cs b/src/tools/WixToolset.HeatTasks/HeatTask.cs
new file mode 100644
index 00000000..8942a7e1
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/HeatTask.cs
@@ -0,0 +1,176 @@
1// 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.
2
3namespace WixToolset.HeatTasks
4{
5 using System;
6 using System.IO;
7 using System.Runtime.InteropServices;
8 using Microsoft.Build.Framework;
9 using Microsoft.Build.Utilities;
10
11 /// <summary>
12 /// A base MSBuild task to run the WiX harvester.
13 /// Specific harvester tasks should extend this class.
14 /// </summary>
15 public abstract partial class HeatTask : ToolTask
16 {
17 private static readonly string ThisDllPath = new Uri(typeof(HeatTask).Assembly.CodeBase).AbsolutePath;
18
19 /// <summary>
20 /// Gets or sets additional options that are appended the the tool command-line.
21 /// </summary>
22 /// <remarks>
23 /// This allows the task to support extended options in the tool which are not
24 /// explicitly implemented as properties on the task.
25 /// </remarks>
26 public string AdditionalOptions { get; set; }
27
28 /// <summary>
29 /// Gets or sets whether to display the logo.
30 /// </summary>
31 public bool NoLogo { get; set; }
32
33 /// <summary>
34 /// Gets or sets whether all warnings should be suppressed.
35 /// </summary>
36 public bool SuppressAllWarnings { get; set; }
37
38 /// <summary>
39 /// Gets or sets a list of specific warnings to be suppressed.
40 /// </summary>
41 public string[] SuppressSpecificWarnings { get; set; }
42
43 /// <summary>
44 /// Gets or sets whether all warnings should be treated as errors.
45 /// </summary>
46 public bool TreatWarningsAsErrors { get; set; }
47
48 /// <summary>
49 /// Gets or sets a list of specific warnings to treat as errors.
50 /// </summary>
51 public string[] TreatSpecificWarningsAsErrors { get; set; }
52
53 /// <summary>
54 /// Gets or sets whether to display verbose output.
55 /// </summary>
56 public bool VerboseOutput { get; set; }
57
58 public bool AutogenerateGuids { get; set; }
59
60 public bool GenerateGuidsNow { get; set; }
61
62 [Required]
63 [Output]
64 public ITaskItem OutputFile { get; set; }
65
66 public bool SuppressFragments { get; set; }
67
68 public bool SuppressUniqueIds { get; set; }
69
70 public string[] Transforms { get; set; }
71
72 protected sealed override string ToolName => "heat.exe";
73
74 /// <summary>
75 /// Gets the name of the heat operation performed by the task.
76 /// </summary>
77 /// <remarks>This is the first parameter passed on the heat.exe command-line.</remarks>
78 /// <value>The name of the heat operation performed by the task.</value>
79 protected abstract string OperationName { get; }
80
81 private string ToolFullPath
82 {
83 get
84 {
85 if (String.IsNullOrEmpty(this.ToolPath))
86 {
87 return Path.Combine(Path.GetDirectoryName(ThisDllPath), this.ToolExe);
88 }
89
90 return Path.Combine(this.ToolPath, this.ToolExe);
91 }
92 }
93
94 /// <summary>
95 /// Get the path to the executable.
96 /// </summary>
97 /// <remarks>
98 /// ToolTask only calls GenerateFullPathToTool when the ToolPath property is not set.
99 /// WiX never sets the ToolPath property, but the user can through $(HeatToolDir).
100 /// If we return only a file name, ToolTask will search the system paths for it.
101 /// </remarks>
102 protected sealed override string GenerateFullPathToTool()
103 {
104#if NETCOREAPP
105 // If we're not using heat.exe, use dotnet.exe to exec heat.dll.
106 // See this.GenerateCommandLine() where "exec heat.dll" is added.
107 if (!IsSelfExecutable(this.ToolFullPath, out var toolFullPath))
108 {
109 return DotnetFullPath;
110 }
111
112 return toolFullPath;
113#else
114 return this.ToolFullPath;
115#endif
116 }
117
118 protected sealed override string GenerateCommandLineCommands()
119 {
120 var commandLineBuilder = new WixCommandLineBuilder();
121
122#if NETCOREAPP
123 // If we're using dotnet.exe as the target executable, see this.GenerateFullPathToTool(),
124 // then add "exec heat.dll" to the beginning of the command-line.
125 if (!IsSelfExecutable(this.ToolFullPath, out var toolFullPath))
126 {
127 //commandLineBuilder.AppendSwitchIfNotNull("exec ", toolFullPath);
128 commandLineBuilder.AppendSwitch($"exec \"{toolFullPath}\"");
129 }
130#endif
131
132 this.BuildCommandLine(commandLineBuilder);
133 return commandLineBuilder.ToString();
134 }
135
136 /// <summary>
137 /// Builds a command line from options in this task.
138 /// </summary>
139 protected virtual void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
140 {
141 commandLineBuilder.AppendIfTrue("-nologo", this.NoLogo);
142 commandLineBuilder.AppendArrayIfNotNull("-sw", this.SuppressSpecificWarnings);
143 commandLineBuilder.AppendIfTrue("-sw", this.SuppressAllWarnings);
144 commandLineBuilder.AppendIfTrue("-v", this.VerboseOutput);
145 commandLineBuilder.AppendArrayIfNotNull("-wx", this.TreatSpecificWarningsAsErrors);
146 commandLineBuilder.AppendIfTrue("-wx", this.TreatWarningsAsErrors);
147
148 commandLineBuilder.AppendIfTrue("-ag", this.AutogenerateGuids);
149 commandLineBuilder.AppendIfTrue("-gg", this.GenerateGuidsNow);
150 commandLineBuilder.AppendIfTrue("-sfrag", this.SuppressFragments);
151 commandLineBuilder.AppendIfTrue("-suid", this.SuppressUniqueIds);
152 commandLineBuilder.AppendArrayIfNotNull("-t ", this.Transforms);
153 commandLineBuilder.AppendTextIfNotNull(this.AdditionalOptions);
154 commandLineBuilder.AppendSwitchIfNotNull("-out ", this.OutputFile);
155 }
156
157#if NETCOREAPP
158 private static readonly string DotnetFullPath = Environment.GetEnvironmentVariable("DOTNET_HOST_PATH") ?? "dotnet";
159
160 private static bool IsSelfExecutable(string proposedToolFullPath, out string toolFullPath)
161 {
162 var toolFullPathWithoutExtension = Path.Combine(Path.GetDirectoryName(proposedToolFullPath), Path.GetFileNameWithoutExtension(proposedToolFullPath));
163 var exeExtension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : String.Empty;
164 var exeToolFullPath = $"{toolFullPathWithoutExtension}{exeExtension}";
165 if (File.Exists(exeToolFullPath))
166 {
167 toolFullPath = exeToolFullPath;
168 return true;
169 }
170
171 toolFullPath = $"{toolFullPathWithoutExtension}.dll";
172 return false;
173 }
174#endif
175 }
176}
diff --git a/src/wix/WixToolset.BuildTasks/RefreshBundleGeneratedFile.cs b/src/tools/WixToolset.HeatTasks/RefreshBundleGeneratedFile.cs
index 983695c9..8f1ad167 100644
--- a/src/wix/WixToolset.BuildTasks/RefreshBundleGeneratedFile.cs
+++ b/src/tools/WixToolset.HeatTasks/RefreshBundleGeneratedFile.cs
@@ -1,6 +1,6 @@
1// 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. 1// 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.
2 2
3namespace WixToolset.BuildTasks 3namespace WixToolset.HeatTasks
4{ 4{
5 using System; 5 using System;
6 using System.Collections; 6 using System.Collections;
@@ -8,48 +8,35 @@ namespace WixToolset.BuildTasks
8 using System.IO; 8 using System.IO;
9 using System.Xml; 9 using System.Xml;
10 using Microsoft.Build.Framework; 10 using Microsoft.Build.Framework;
11 using Microsoft.Build.Utilities;
12 11
13 /// <summary> 12 /// <summary>
14 /// This task refreshes the generated file for bundle projects. 13 /// This task refreshes the generated file for bundle projects.
15 /// </summary> 14 /// </summary>
16 public class RefreshBundleGeneratedFile : Task 15 public class RefreshBundleGeneratedFile : RefreshTask
17 { 16 {
18 /// <summary> 17 /// <summary>
19 /// The list of files to generate.
20 /// </summary>
21 [Required]
22 public ITaskItem[] GeneratedFiles { get; set; }
23
24 /// <summary>
25 /// All the project references in the project.
26 /// </summary>
27 [Required]
28 public ITaskItem[] ProjectReferencePaths { get; set; }
29
30 /// <summary>
31 /// Gets a complete list of external cabs referenced by the given installer database file. 18 /// Gets a complete list of external cabs referenced by the given installer database file.
32 /// </summary> 19 /// </summary>
33 /// <returns>True upon completion of the task execution.</returns> 20 /// <returns>True upon completion of the task execution.</returns>
34 public override bool Execute() 21 public override bool Execute()
35 { 22 {
36 ArrayList payloadGroupRefs = new ArrayList(); 23 var payloadGroupRefs = new ArrayList();
37 ArrayList packageGroupRefs = new ArrayList(); 24 var packageGroupRefs = new ArrayList();
38 for (int i = 0; i < this.ProjectReferencePaths.Length; i++) 25 for (var i = 0; i < this.ProjectReferencePaths.Length; i++)
39 { 26 {
40 ITaskItem item = this.ProjectReferencePaths[i]; 27 var item = this.ProjectReferencePaths[i];
41 28
42 if (!String.IsNullOrEmpty(item.GetMetadata(ToolsCommon.DoNotHarvest))) 29 if (!String.IsNullOrEmpty(item.GetMetadata(DoNotHarvest)))
43 { 30 {
44 continue; 31 continue;
45 } 32 }
46 33
47 string projectPath = item.GetMetadata("MSBuildSourceProjectFile"); 34 var projectPath = item.GetMetadata("MSBuildSourceProjectFile");
48 string projectName = Path.GetFileNameWithoutExtension(projectPath); 35 var projectName = Path.GetFileNameWithoutExtension(projectPath);
49 string referenceName = ToolsCommon.GetIdentifierFromName(ToolsCommon.GetMetadataOrDefault(item, "Name", projectName)); 36 var referenceName = GetIdentifierFromName(GetMetadataOrDefault(item, "Name", projectName));
50 37
51 string[] pogs = item.GetMetadata("RefProjectOutputGroups").Split(';'); 38 var pogs = item.GetMetadata("RefProjectOutputGroups").Split(';');
52 foreach (string pog in pogs) 39 foreach (var pog in pogs)
53 { 40 {
54 if (!String.IsNullOrEmpty(pog)) 41 if (!String.IsNullOrEmpty(pog))
55 { 42 {
@@ -60,43 +47,43 @@ namespace WixToolset.BuildTasks
60 } 47 }
61 } 48 }
62 49
63 XmlDocument doc = new XmlDocument(); 50 var doc = new XmlDocument();
64 51
65 XmlProcessingInstruction head = doc.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); 52 var head = doc.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
66 doc.AppendChild(head); 53 doc.AppendChild(head);
67 54
68 XmlElement rootElement = doc.CreateElement("Wix"); 55 var rootElement = doc.CreateElement("Wix");
69 rootElement.SetAttribute("xmlns", "http://wixtoolset.org/schemas/v4/wxs"); 56 rootElement.SetAttribute("xmlns", "http://wixtoolset.org/schemas/v4/wxs");
70 doc.AppendChild(rootElement); 57 doc.AppendChild(rootElement);
71 58
72 XmlElement fragment = doc.CreateElement("Fragment"); 59 var fragment = doc.CreateElement("Fragment");
73 rootElement.AppendChild(fragment); 60 rootElement.AppendChild(fragment);
74 61
75 XmlElement payloadGroup = doc.CreateElement("PayloadGroup"); 62 var payloadGroup = doc.CreateElement("PayloadGroup");
76 payloadGroup.SetAttribute("Id", "Bundle.Generated.Payloads"); 63 payloadGroup.SetAttribute("Id", "Bundle.Generated.Payloads");
77 fragment.AppendChild(payloadGroup); 64 fragment.AppendChild(payloadGroup);
78 65
79 XmlElement packageGroup = doc.CreateElement("PackageGroup"); 66 var packageGroup = doc.CreateElement("PackageGroup");
80 packageGroup.SetAttribute("Id", "Bundle.Generated.Packages"); 67 packageGroup.SetAttribute("Id", "Bundle.Generated.Packages");
81 fragment.AppendChild(packageGroup); 68 fragment.AppendChild(packageGroup);
82 69
83 foreach (string payloadGroupRef in payloadGroupRefs) 70 foreach (string payloadGroupRef in payloadGroupRefs)
84 { 71 {
85 XmlElement payloadGroupRefElement = doc.CreateElement("PayloadGroupRef"); 72 var payloadGroupRefElement = doc.CreateElement("PayloadGroupRef");
86 payloadGroupRefElement.SetAttribute("Id", payloadGroupRef); 73 payloadGroupRefElement.SetAttribute("Id", payloadGroupRef);
87 payloadGroup.AppendChild(payloadGroupRefElement); 74 payloadGroup.AppendChild(payloadGroupRefElement);
88 } 75 }
89 76
90 foreach (string packageGroupRef in packageGroupRefs) 77 foreach (string packageGroupRef in packageGroupRefs)
91 { 78 {
92 XmlElement packageGroupRefElement = doc.CreateElement("PackageGroupRef"); 79 var packageGroupRefElement = doc.CreateElement("PackageGroupRef");
93 packageGroupRefElement.SetAttribute("Id", packageGroupRef); 80 packageGroupRefElement.SetAttribute("Id", packageGroupRef);
94 packageGroup.AppendChild(packageGroupRefElement); 81 packageGroup.AppendChild(packageGroupRefElement);
95 } 82 }
96 83
97 foreach (ITaskItem item in this.GeneratedFiles) 84 foreach (var item in this.GeneratedFiles)
98 { 85 {
99 string fullPath = item.GetMetadata("FullPath"); 86 var fullPath = item.GetMetadata("FullPath");
100 87
101 payloadGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath) + ".Payloads"); 88 payloadGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath) + ".Payloads");
102 packageGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath) + ".Packages"); 89 packageGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath) + ".Packages");
diff --git a/src/wix/WixToolset.BuildTasks/RefreshGeneratedFile.cs b/src/tools/WixToolset.HeatTasks/RefreshGeneratedFile.cs
index e18ae222..1e43cc1f 100644
--- a/src/wix/WixToolset.BuildTasks/RefreshGeneratedFile.cs
+++ b/src/tools/WixToolset.HeatTasks/RefreshGeneratedFile.cs
@@ -1,6 +1,6 @@
1// 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. 1// 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.
2 2
3namespace WixToolset.BuildTasks 3namespace WixToolset.HeatTasks
4{ 4{
5 using System; 5 using System;
6 using System.Collections; 6 using System.Collections;
@@ -8,48 +8,36 @@ namespace WixToolset.BuildTasks
8 using System.IO; 8 using System.IO;
9 using System.Xml; 9 using System.Xml;
10 using Microsoft.Build.Framework; 10 using Microsoft.Build.Framework;
11 using Microsoft.Build.Utilities;
12 11
13 /// <summary> 12 /// <summary>
14 /// This task refreshes the generated file that contains ComponentGroupRefs 13 /// This task refreshes the generated file that contains ComponentGroupRefs
15 /// to harvested output. 14 /// to harvested output.
16 /// </summary> 15 /// </summary>
17 public class RefreshGeneratedFile : Task 16 public class RefreshGeneratedFile : RefreshTask
18 { 17 {
19 /// <summary> 18 /// <summary>
20 /// The list of files to generate.
21 /// </summary>
22 [Required]
23 public ITaskItem[] GeneratedFiles { get; set; }
24
25 /// <summary>
26 /// All the project references in the project.
27 /// </summary>
28 [Required]
29 public ITaskItem[] ProjectReferencePaths { get; set; }
30
31 /// <summary>
32 /// Gets a complete list of external cabs referenced by the given installer database file. 19 /// Gets a complete list of external cabs referenced by the given installer database file.
33 /// </summary> 20 /// </summary>
34 /// <returns>True upon completion of the task execution.</returns> 21 /// <returns>True upon completion of the task execution.</returns>
35 public override bool Execute() 22 public override bool Execute()
36 { 23 {
37 ArrayList componentGroupRefs = new ArrayList(); 24 var componentGroupRefs = new ArrayList();
38 for (int i = 0; i < this.ProjectReferencePaths.Length; i++) 25
26 for (var i = 0; i < this.ProjectReferencePaths.Length; i++)
39 { 27 {
40 ITaskItem item = this.ProjectReferencePaths[i]; 28 var item = this.ProjectReferencePaths[i];
41 29
42 if (!String.IsNullOrEmpty(item.GetMetadata(ToolsCommon.DoNotHarvest))) 30 if (!String.IsNullOrEmpty(item.GetMetadata(DoNotHarvest)))
43 { 31 {
44 continue; 32 continue;
45 } 33 }
46 34
47 string projectPath = item.GetMetadata("MSBuildSourceProjectFile"); 35 var projectPath = item.GetMetadata("MSBuildSourceProjectFile");
48 string projectName = Path.GetFileNameWithoutExtension(projectPath); 36 var projectName = Path.GetFileNameWithoutExtension(projectPath);
49 string referenceName = ToolsCommon.GetIdentifierFromName(ToolsCommon.GetMetadataOrDefault(item, "Name", projectName)); 37 var referenceName = GetIdentifierFromName(GetMetadataOrDefault(item, "Name", projectName));
50 38
51 string[] pogs = item.GetMetadata("RefProjectOutputGroups").Split(';'); 39 var pogs = item.GetMetadata("RefProjectOutputGroups").Split(';');
52 foreach (string pog in pogs) 40 foreach (var pog in pogs)
53 { 41 {
54 if (!String.IsNullOrEmpty(pog)) 42 if (!String.IsNullOrEmpty(pog))
55 { 43 {
@@ -58,32 +46,32 @@ namespace WixToolset.BuildTasks
58 } 46 }
59 } 47 }
60 48
61 XmlDocument doc = new XmlDocument(); 49 var doc = new XmlDocument();
62 50
63 XmlProcessingInstruction head = doc.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); 51 var head = doc.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
64 doc.AppendChild(head); 52 doc.AppendChild(head);
65 53
66 XmlElement rootElement = doc.CreateElement("Wix"); 54 var rootElement = doc.CreateElement("Wix");
67 rootElement.SetAttribute("xmlns", "http://wixtoolset.org/schemas/v4/wxs"); 55 rootElement.SetAttribute("xmlns", "http://wixtoolset.org/schemas/v4/wxs");
68 doc.AppendChild(rootElement); 56 doc.AppendChild(rootElement);
69 57
70 XmlElement fragment = doc.CreateElement("Fragment"); 58 var fragment = doc.CreateElement("Fragment");
71 rootElement.AppendChild(fragment); 59 rootElement.AppendChild(fragment);
72 60
73 XmlElement componentGroup = doc.CreateElement("ComponentGroup"); 61 var componentGroup = doc.CreateElement("ComponentGroup");
74 componentGroup.SetAttribute("Id", "Product.Generated"); 62 componentGroup.SetAttribute("Id", "Product.Generated");
75 fragment.AppendChild(componentGroup); 63 fragment.AppendChild(componentGroup);
76 64
77 foreach (string componentGroupRef in componentGroupRefs) 65 foreach (string componentGroupRef in componentGroupRefs)
78 { 66 {
79 XmlElement componentGroupRefElement = doc.CreateElement("ComponentGroupRef"); 67 var componentGroupRefElement = doc.CreateElement("ComponentGroupRef");
80 componentGroupRefElement.SetAttribute("Id", componentGroupRef); 68 componentGroupRefElement.SetAttribute("Id", componentGroupRef);
81 componentGroup.AppendChild(componentGroupRefElement); 69 componentGroup.AppendChild(componentGroupRefElement);
82 } 70 }
83 71
84 foreach (ITaskItem item in this.GeneratedFiles) 72 foreach (var item in this.GeneratedFiles)
85 { 73 {
86 string fullPath = item.GetMetadata("FullPath"); 74 var fullPath = item.GetMetadata("FullPath");
87 75
88 componentGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath)); 76 componentGroup.SetAttribute("Id", Path.GetFileNameWithoutExtension(fullPath));
89 try 77 try
diff --git a/src/tools/WixToolset.HeatTasks/RefreshTask.cs b/src/tools/WixToolset.HeatTasks/RefreshTask.cs
new file mode 100644
index 00000000..0b378272
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/RefreshTask.cs
@@ -0,0 +1,59 @@
1// 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.
2
3namespace WixToolset.HeatTasks
4{
5 using System;
6 using System.Text.RegularExpressions;
7 using Microsoft.Build.Framework;
8 using Microsoft.Build.Utilities;
9
10 /// <summary>
11 /// A base MSBuild task to refresh generated files.
12 /// </summary>
13 public abstract class RefreshTask : Task
14 {
15 private static readonly Regex AddPrefix = new Regex(@"^[^a-zA-Z_]");
16 private static readonly Regex IllegalIdentifierCharacters = new Regex(@"[^A-Za-z0-9_\.]|\.{2,}"); // non 'words' and assorted valid characters
17
18 /// <summary>Metadata key name to turn off harvesting of project references.</summary>
19 protected const string DoNotHarvest = "DoNotHarvest";
20
21 /// <summary>
22 /// The list of files to generate.
23 /// </summary>
24 [Required]
25 public ITaskItem[] GeneratedFiles { get; set; }
26
27 /// <summary>
28 /// All the project references in the project.
29 /// </summary>
30 [Required]
31 public ITaskItem[] ProjectReferencePaths { get; set; }
32
33 /// <summary>
34 /// Return an identifier based on passed file/directory name
35 /// </summary>
36 /// <param name="name">File/directory name to generate identifer from</param>
37 /// <returns>A version of the name that is a legal identifier.</returns>
38 /// <remarks>This is duplicated from WiX's Common class.</remarks>
39 protected static string GetIdentifierFromName(string name)
40 {
41 var result = IllegalIdentifierCharacters.Replace(name, "_"); // replace illegal characters with "_".
42
43 // MSI identifiers must begin with an alphabetic character or an
44 // underscore. Prefix all other values with an underscore.
45 if (AddPrefix.IsMatch(name))
46 {
47 result = String.Concat("_", result);
48 }
49
50 return result;
51 }
52
53 protected static string GetMetadataOrDefault(ITaskItem item, string metadataName, string defaultValue)
54 {
55 var value = item.GetMetadata(metadataName);
56 return String.IsNullOrWhiteSpace(value) ? defaultValue : value;
57 }
58 }
59}
diff --git a/src/tools/WixToolset.HeatTasks/WixCommandLineBuilder.cs b/src/tools/WixToolset.HeatTasks/WixCommandLineBuilder.cs
new file mode 100644
index 00000000..c3989902
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/WixCommandLineBuilder.cs
@@ -0,0 +1,56 @@
1// 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.
2
3namespace WixToolset.HeatTasks
4{
5 using System;
6 using System.Collections.Generic;
7 using Microsoft.Build.Utilities;
8
9 /// <summary>
10 /// Helper class for appending the command line arguments.
11 /// </summary>
12 public class WixCommandLineBuilder : CommandLineBuilder
13 {
14 /// <summary>
15 /// Append a switch to the command line if the condition is true.
16 /// </summary>
17 /// <param name="switchName">Switch to append.</param>
18 /// <param name="condition">Condition specified by the user.</param>
19 public void AppendIfTrue(string switchName, bool condition)
20 {
21 if (condition)
22 {
23 this.AppendSwitch(switchName);
24 }
25 }
26
27 /// <summary>
28 /// Append a switch to the command line if any values in the array have been specified.
29 /// </summary>
30 /// <param name="switchName">Switch to append.</param>
31 /// <param name="values">Values specified by the user.</param>
32 public void AppendArrayIfNotNull(string switchName, IEnumerable<string> values)
33 {
34 if (values != null)
35 {
36 foreach (var value in values)
37 {
38 this.AppendSwitchIfNotNull(switchName, value);
39 }
40 }
41 }
42
43 /// <summary>
44 /// Append arbitrary text to the command-line if specified.
45 /// </summary>
46 /// <param name="textToAppend">Text to append.</param>
47 public void AppendTextIfNotNull(string textToAppend)
48 {
49 if (!String.IsNullOrWhiteSpace(textToAppend))
50 {
51 this.AppendSpaceIfNotEmpty();
52 this.AppendTextUnquoted(textToAppend);
53 }
54 }
55 }
56}
diff --git a/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj b/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj
new file mode 100644
index 00000000..ea52bdfa
--- /dev/null
+++ b/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj
@@ -0,0 +1,17 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
7 <Title>WiX Toolset Heat MSBuild Tasks</Title>
8 <DebugType>embedded</DebugType>
9 <PublishRepositoryUrl>true</PublishRepositoryUrl>
10 <!-- https://github.com/Microsoft/msbuild/issues/2360 -->
11 <PlatformTarget>AnyCPU</PlatformTarget>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <PackageReference Include="Microsoft.Build.Tasks.Core" />
16 </ItemGroup>
17</Project>
diff --git a/src/wix/heat/AssemblyHarvester.cs b/src/tools/heat/AssemblyHarvester.cs
index 2304d827..2304d827 100644
--- a/src/wix/heat/AssemblyHarvester.cs
+++ b/src/tools/heat/AssemblyHarvester.cs
diff --git a/src/tools/heat/ConsoleMessageListener.cs b/src/tools/heat/ConsoleMessageListener.cs
new file mode 100644
index 00000000..ebf1622b
--- /dev/null
+++ b/src/tools/heat/ConsoleMessageListener.cs
@@ -0,0 +1,90 @@
1// 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.
2
3namespace WixToolset.Tools.Core
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.Text;
9 using System.Threading;
10 using WixToolset.Data;
11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Services;
13
14 public sealed class ConsoleMessageListener : IMessageListener
15 {
16 public ConsoleMessageListener(string prefix, string appName)
17 {
18 this.Prefix = prefix;
19 this.AppName = appName;
20
21 PrepareConsoleForLocalization();
22 }
23
24 public string AppName { get; }
25
26 public string Prefix { get; }
27
28 public void Write(Message message)
29 {
30 var filename = message.SourceLineNumbers?.FileName ?? this.AppName;
31 var type = message.Level.ToString().ToLowerInvariant();
32 var output = message.Level >= MessageLevel.Warning ? Console.Out : Console.Error;
33
34 if (message.SourceLineNumbers?.LineNumber.HasValue == true)
35 {
36 filename = String.Concat(filename, "(", message.SourceLineNumbers?.LineNumber.Value, ")");
37 }
38
39 output.WriteLine("{0} : {1} {2}{3:0000}: {4}", filename, type, this.Prefix, message.Id, message.ToString());
40
41 var fileNames = GetFileNames(message.SourceLineNumbers);
42 if (fileNames.Count > 1)
43 {
44 foreach (var fileName in fileNames)
45 {
46 output.WriteLine("Source trace: {0}", fileName);
47 }
48 }
49 }
50
51 public void Write(string message) => Console.Out.WriteLine(message);
52
53 public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
54
55 private static IList<string> GetFileNames(SourceLineNumber sourceLineNumbers)
56 {
57 var fileNames = new List<string>();
58
59 for (var sln = sourceLineNumbers; null != sln; sln = sln.Parent)
60 {
61 if (String.IsNullOrEmpty(sln.FileName))
62 {
63 continue;
64 }
65 else if (sln.LineNumber.HasValue)
66 {
67 fileNames.Add(String.Format(CultureInfo.CurrentUICulture, "{0}: line {1}", sln.FileName, sln.LineNumber));
68 }
69 else
70 {
71 fileNames.Add(sln.FileName);
72 }
73 }
74
75 return fileNames;
76 }
77
78 private static void PrepareConsoleForLocalization()
79 {
80 Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture();
81
82 if (Console.OutputEncoding.CodePage != Encoding.UTF8.CodePage &&
83 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage &&
84 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage)
85 {
86 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
87 }
88 }
89 }
90}
diff --git a/src/wix/heat/Data/HarvesterErrors.cs b/src/tools/heat/Data/HarvesterErrors.cs
index a8a3055a..a8a3055a 100644
--- a/src/wix/heat/Data/HarvesterErrors.cs
+++ b/src/tools/heat/Data/HarvesterErrors.cs
diff --git a/src/wix/heat/Data/HarvesterVerboses.cs b/src/tools/heat/Data/HarvesterVerboses.cs
index 72de2351..72de2351 100644
--- a/src/wix/heat/Data/HarvesterVerboses.cs
+++ b/src/tools/heat/Data/HarvesterVerboses.cs
diff --git a/src/wix/heat/Data/HarvesterWarnings.cs b/src/tools/heat/Data/HarvesterWarnings.cs
index 80ee5c31..80ee5c31 100644
--- a/src/wix/heat/Data/HarvesterWarnings.cs
+++ b/src/tools/heat/Data/HarvesterWarnings.cs
diff --git a/src/wix/heat/Data/HeatCommandLineOption.cs b/src/tools/heat/Data/HeatCommandLineOption.cs
index 5815abf0..5815abf0 100644
--- a/src/wix/heat/Data/HeatCommandLineOption.cs
+++ b/src/tools/heat/Data/HeatCommandLineOption.cs
diff --git a/src/wix/heat/Data/IHeatCommandLine.cs b/src/tools/heat/Data/IHeatCommandLine.cs
index 9198468d..9198468d 100644
--- a/src/wix/heat/Data/IHeatCommandLine.cs
+++ b/src/tools/heat/Data/IHeatCommandLine.cs
diff --git a/src/wix/heat/DirectoryHarvester.cs b/src/tools/heat/DirectoryHarvester.cs
index c1cc3edb..c1cc3edb 100644
--- a/src/wix/heat/DirectoryHarvester.cs
+++ b/src/tools/heat/DirectoryHarvester.cs
diff --git a/src/wix/heat/DllHarvester.cs b/src/tools/heat/DllHarvester.cs
index e8c5ae40..e8c5ae40 100644
--- a/src/wix/heat/DllHarvester.cs
+++ b/src/tools/heat/DllHarvester.cs
diff --git a/src/wix/heat/Extensibility/BaseHarvesterExtension.cs b/src/tools/heat/Extensibility/BaseHarvesterExtension.cs
index 02696d5b..02696d5b 100644
--- a/src/wix/heat/Extensibility/BaseHarvesterExtension.cs
+++ b/src/tools/heat/Extensibility/BaseHarvesterExtension.cs
diff --git a/src/wix/heat/Extensibility/BaseHeatExtension.cs b/src/tools/heat/Extensibility/BaseHeatExtension.cs
index b76aaf62..b76aaf62 100644
--- a/src/wix/heat/Extensibility/BaseHeatExtension.cs
+++ b/src/tools/heat/Extensibility/BaseHeatExtension.cs
diff --git a/src/wix/heat/Extensibility/BaseMutatorExtension.cs b/src/tools/heat/Extensibility/BaseMutatorExtension.cs
index c36a8ed1..c36a8ed1 100644
--- a/src/wix/heat/Extensibility/BaseMutatorExtension.cs
+++ b/src/tools/heat/Extensibility/BaseMutatorExtension.cs
diff --git a/src/wix/heat/Extensibility/IHarvester.cs b/src/tools/heat/Extensibility/IHarvester.cs
index 6d363b50..6d363b50 100644
--- a/src/wix/heat/Extensibility/IHarvester.cs
+++ b/src/tools/heat/Extensibility/IHarvester.cs
diff --git a/src/wix/heat/Extensibility/IHarvesterCore.cs b/src/tools/heat/Extensibility/IHarvesterCore.cs
index 3c34b8a1..3c34b8a1 100644
--- a/src/wix/heat/Extensibility/IHarvesterCore.cs
+++ b/src/tools/heat/Extensibility/IHarvesterCore.cs
diff --git a/src/wix/heat/Extensibility/IHarvesterExtension.cs b/src/tools/heat/Extensibility/IHarvesterExtension.cs
index 5125ea32..5125ea32 100644
--- a/src/wix/heat/Extensibility/IHarvesterExtension.cs
+++ b/src/tools/heat/Extensibility/IHarvesterExtension.cs
diff --git a/src/wix/heat/Extensibility/IHeatCore.cs b/src/tools/heat/Extensibility/IHeatCore.cs
index 0aa01b62..0aa01b62 100644
--- a/src/wix/heat/Extensibility/IHeatCore.cs
+++ b/src/tools/heat/Extensibility/IHeatCore.cs
diff --git a/src/wix/heat/Extensibility/IHeatExtension.cs b/src/tools/heat/Extensibility/IHeatExtension.cs
index 8a00da37..8a00da37 100644
--- a/src/wix/heat/Extensibility/IHeatExtension.cs
+++ b/src/tools/heat/Extensibility/IHeatExtension.cs
diff --git a/src/wix/heat/Extensibility/IMutator.cs b/src/tools/heat/Extensibility/IMutator.cs
index c936339e..c936339e 100644
--- a/src/wix/heat/Extensibility/IMutator.cs
+++ b/src/tools/heat/Extensibility/IMutator.cs
diff --git a/src/wix/heat/Extensibility/IMutatorExtension.cs b/src/tools/heat/Extensibility/IMutatorExtension.cs
index b81f586e..b81f586e 100644
--- a/src/wix/heat/Extensibility/IMutatorExtension.cs
+++ b/src/tools/heat/Extensibility/IMutatorExtension.cs
diff --git a/src/wix/heat/FileHarvester.cs b/src/tools/heat/FileHarvester.cs
index 886b942a..886b942a 100644
--- a/src/wix/heat/FileHarvester.cs
+++ b/src/tools/heat/FileHarvester.cs
diff --git a/src/wix/heat/Harvester.cs b/src/tools/heat/Harvester.cs
index 791c1cb2..791c1cb2 100644
--- a/src/wix/heat/Harvester.cs
+++ b/src/tools/heat/Harvester.cs
diff --git a/src/wix/heat/HarvesterCore.cs b/src/tools/heat/HarvesterCore.cs
index 92b34ab0..92b34ab0 100644
--- a/src/wix/heat/HarvesterCore.cs
+++ b/src/tools/heat/HarvesterCore.cs
diff --git a/src/wix/heat/HeatCommand.cs b/src/tools/heat/HeatCommand.cs
index 56277004..56277004 100644
--- a/src/wix/heat/HeatCommand.cs
+++ b/src/tools/heat/HeatCommand.cs
diff --git a/src/wix/heat/HeatCommandLine.cs b/src/tools/heat/HeatCommandLine.cs
index b11dda4e..b11dda4e 100644
--- a/src/wix/heat/HeatCommandLine.cs
+++ b/src/tools/heat/HeatCommandLine.cs
diff --git a/src/wix/heat/HeatCommandLineFactory.cs b/src/tools/heat/HeatCommandLineFactory.cs
index 44291e48..44291e48 100644
--- a/src/wix/heat/HeatCommandLineFactory.cs
+++ b/src/tools/heat/HeatCommandLineFactory.cs
diff --git a/src/wix/heat/HeatCore.cs b/src/tools/heat/HeatCore.cs
index 578c4aab..578c4aab 100644
--- a/src/wix/heat/HeatCore.cs
+++ b/src/tools/heat/HeatCore.cs
diff --git a/src/wix/heat/HelpCommand.cs b/src/tools/heat/HelpCommand.cs
index d991b4fa..d991b4fa 100644
--- a/src/wix/heat/HelpCommand.cs
+++ b/src/tools/heat/HelpCommand.cs
diff --git a/src/wix/heat/IIsFinalizeHarvesterMutator.cs b/src/tools/heat/IIsFinalizeHarvesterMutator.cs
index cfe90272..cfe90272 100644
--- a/src/wix/heat/IIsFinalizeHarvesterMutator.cs
+++ b/src/tools/heat/IIsFinalizeHarvesterMutator.cs
diff --git a/src/wix/heat/IIsHarvesterMutator.cs b/src/tools/heat/IIsHarvesterMutator.cs
index a0147d0f..a0147d0f 100644
--- a/src/wix/heat/IIsHarvesterMutator.cs
+++ b/src/tools/heat/IIsHarvesterMutator.cs
diff --git a/src/wix/heat/IIsHeatExtension.cs b/src/tools/heat/IIsHeatExtension.cs
index be998370..be998370 100644
--- a/src/wix/heat/IIsHeatExtension.cs
+++ b/src/tools/heat/IIsHeatExtension.cs
diff --git a/src/wix/heat/IIsWebSiteHarvester.cs b/src/tools/heat/IIsWebSiteHarvester.cs
index 6e5e29c7..6e5e29c7 100644
--- a/src/wix/heat/IIsWebSiteHarvester.cs
+++ b/src/tools/heat/IIsWebSiteHarvester.cs
diff --git a/src/wix/heat/Mutator.cs b/src/tools/heat/Mutator.cs
index 8c63882d..8c63882d 100644
--- a/src/wix/heat/Mutator.cs
+++ b/src/tools/heat/Mutator.cs
diff --git a/src/wix/heat/PerformanceCategoryHarvester.cs b/src/tools/heat/PerformanceCategoryHarvester.cs
index 6be3401b..6be3401b 100644
--- a/src/wix/heat/PerformanceCategoryHarvester.cs
+++ b/src/tools/heat/PerformanceCategoryHarvester.cs
diff --git a/src/wix/heat/Program.cs b/src/tools/heat/Program.cs
index 0b602f76..f74def8f 100644
--- a/src/wix/heat/Program.cs
+++ b/src/tools/heat/Program.cs
@@ -7,7 +7,6 @@ namespace WixToolset.Tools.Heat
7 using System.Threading; 7 using System.Threading;
8 using System.Threading.Tasks; 8 using System.Threading.Tasks;
9 using WixToolset.Core; 9 using WixToolset.Core;
10 using WixToolset.Core.Burn;
11 using WixToolset.Data; 10 using WixToolset.Data;
12 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
@@ -29,8 +28,7 @@ namespace WixToolset.Tools.Heat
29 [MTAThread] 28 [MTAThread]
30 public static async Task<int> Main(string[] args) 29 public static async Task<int> Main(string[] args)
31 { 30 {
32 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider() 31 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
33 .AddBundleBackend();
34 var listener = new ConsoleMessageListener("HEAT", "heat.exe"); 32 var listener = new ConsoleMessageListener("HEAT", "heat.exe");
35 33
36 try 34 try
diff --git a/src/wix/heat/RegFileHarvester.cs b/src/tools/heat/RegFileHarvester.cs
index b7ad8c7b..b7ad8c7b 100644
--- a/src/wix/heat/RegFileHarvester.cs
+++ b/src/tools/heat/RegFileHarvester.cs
diff --git a/src/wix/heat/RegistryHarvester.cs b/src/tools/heat/RegistryHarvester.cs
index 0dfd3a29..0dfd3a29 100644
--- a/src/wix/heat/RegistryHarvester.cs
+++ b/src/tools/heat/RegistryHarvester.cs
diff --git a/src/wix/heat/Serialize/CodeDomInterfaces.cs b/src/tools/heat/Serialize/CodeDomInterfaces.cs
index bd674db6..bd674db6 100644
--- a/src/wix/heat/Serialize/CodeDomInterfaces.cs
+++ b/src/tools/heat/Serialize/CodeDomInterfaces.cs
diff --git a/src/wix/heat/Serialize/CodeDomReader.cs b/src/tools/heat/Serialize/CodeDomReader.cs
index 0741bf68..0741bf68 100644
--- a/src/wix/heat/Serialize/CodeDomReader.cs
+++ b/src/tools/heat/Serialize/CodeDomReader.cs
diff --git a/src/wix/heat/Serialize/ElementCollection.cs b/src/tools/heat/Serialize/ElementCollection.cs
index bacbafbd..bacbafbd 100644
--- a/src/wix/heat/Serialize/ElementCollection.cs
+++ b/src/tools/heat/Serialize/ElementCollection.cs
diff --git a/src/wix/heat/Serialize/WixHarvesterStrings.Designer.cs b/src/tools/heat/Serialize/WixHarvesterStrings.Designer.cs
index cc16e57a..cc16e57a 100644
--- a/src/wix/heat/Serialize/WixHarvesterStrings.Designer.cs
+++ b/src/tools/heat/Serialize/WixHarvesterStrings.Designer.cs
diff --git a/src/wix/heat/Serialize/WixHarvesterStrings.resx b/src/tools/heat/Serialize/WixHarvesterStrings.resx
index 5894a190..5894a190 100644
--- a/src/wix/heat/Serialize/WixHarvesterStrings.resx
+++ b/src/tools/heat/Serialize/WixHarvesterStrings.resx
diff --git a/src/wix/heat/Serialize/iis.cs b/src/tools/heat/Serialize/iis.cs
index 3f2943f8..3f2943f8 100644
--- a/src/wix/heat/Serialize/iis.cs
+++ b/src/tools/heat/Serialize/iis.cs
diff --git a/src/wix/heat/Serialize/util.cs b/src/tools/heat/Serialize/util.cs
index 84f56eb0..84f56eb0 100644
--- a/src/wix/heat/Serialize/util.cs
+++ b/src/tools/heat/Serialize/util.cs
diff --git a/src/wix/heat/Serialize/vs.cs b/src/tools/heat/Serialize/vs.cs
index 8f926efc..8f926efc 100644
--- a/src/wix/heat/Serialize/vs.cs
+++ b/src/tools/heat/Serialize/vs.cs
diff --git a/src/wix/heat/Serialize/wix.cs b/src/tools/heat/Serialize/wix.cs
index b881fb92..b881fb92 100644
--- a/src/wix/heat/Serialize/wix.cs
+++ b/src/tools/heat/Serialize/wix.cs
diff --git a/src/wix/heat/TypeLibraryHarvester.cs b/src/tools/heat/TypeLibraryHarvester.cs
index b5c1cba6..b5c1cba6 100644
--- a/src/wix/heat/TypeLibraryHarvester.cs
+++ b/src/tools/heat/TypeLibraryHarvester.cs
diff --git a/src/wix/heat/UtilFinalizeHarvesterMutator.cs b/src/tools/heat/UtilFinalizeHarvesterMutator.cs
index 5af56e89..5af56e89 100644
--- a/src/wix/heat/UtilFinalizeHarvesterMutator.cs
+++ b/src/tools/heat/UtilFinalizeHarvesterMutator.cs
diff --git a/src/wix/heat/UtilHarvesterMutator.cs b/src/tools/heat/UtilHarvesterMutator.cs
index af2584e3..af2584e3 100644
--- a/src/wix/heat/UtilHarvesterMutator.cs
+++ b/src/tools/heat/UtilHarvesterMutator.cs
diff --git a/src/wix/heat/UtilHeatExtension.cs b/src/tools/heat/UtilHeatExtension.cs
index 5ad5ef8a..469e38b5 100644
--- a/src/wix/heat/UtilHeatExtension.cs
+++ b/src/tools/heat/UtilHeatExtension.cs
@@ -5,10 +5,7 @@ namespace WixToolset.Harvesters
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.IO; 7 using System.IO;
8 using WixToolset.Core.Burn.Interfaces;
9 using WixToolset.Data; 8 using WixToolset.Data;
10 using WixToolset.Data.Symbols;
11 using WixToolset.Extensibility.Services;
12 using WixToolset.Harvesters.Data; 9 using WixToolset.Harvesters.Data;
13 using WixToolset.Harvesters.Extensibility; 10 using WixToolset.Harvesters.Extensibility;
14 11
@@ -19,11 +16,8 @@ namespace WixToolset.Harvesters
19 { 16 {
20 public UtilHeatExtension(IServiceProvider serviceProvider) 17 public UtilHeatExtension(IServiceProvider serviceProvider)
21 { 18 {
22 this.PayloadHarvester = serviceProvider.GetService<IPayloadHarvester>();
23 } 19 }
24 20
25 private IPayloadHarvester PayloadHarvester { get; }
26
27 /// <summary> 21 /// <summary>
28 /// Gets the supported command line types for this extension. 22 /// Gets the supported command line types for this extension.
29 /// </summary> 23 /// </summary>
@@ -36,8 +30,6 @@ namespace WixToolset.Harvesters
36 { 30 {
37 new HeatCommandLineOption("dir", "harvest a directory"), 31 new HeatCommandLineOption("dir", "harvest a directory"),
38 new HeatCommandLineOption("file", "harvest a file"), 32 new HeatCommandLineOption("file", "harvest a file"),
39 new HeatCommandLineOption("exepackagepayload", "harvest a bundle payload as ExePackagePayload"),
40 new HeatCommandLineOption("msupackagepayload", "harvest a bundle payload as MsuPackagePayload"),
41 new HeatCommandLineOption("perf", "harvest performance counters"), 33 new HeatCommandLineOption("perf", "harvest performance counters"),
42 new HeatCommandLineOption("reg", "harvest a .reg file"), 34 new HeatCommandLineOption("reg", "harvest a .reg file"),
43 new HeatCommandLineOption("-ag", "autogenerate component guids at compile time"), 35 new HeatCommandLineOption("-ag", "autogenerate component guids at compile time"),
diff --git a/src/wix/heat/UtilMutator.cs b/src/tools/heat/UtilMutator.cs
index 0bc15cd6..0bc15cd6 100644
--- a/src/wix/heat/UtilMutator.cs
+++ b/src/tools/heat/UtilMutator.cs
diff --git a/src/wix/heat/UtilTransformMutator.cs b/src/tools/heat/UtilTransformMutator.cs
index 2d3f2bb0..2d3f2bb0 100644
--- a/src/wix/heat/UtilTransformMutator.cs
+++ b/src/tools/heat/UtilTransformMutator.cs
diff --git a/src/wix/heat/VSHeatExtension.cs b/src/tools/heat/VSHeatExtension.cs
index d31cd25a..d31cd25a 100644
--- a/src/wix/heat/VSHeatExtension.cs
+++ b/src/tools/heat/VSHeatExtension.cs
diff --git a/src/wix/heat/VSProjectHarvester.cs b/src/tools/heat/VSProjectHarvester.cs
index 93b20cd8..93b20cd8 100644
--- a/src/wix/heat/VSProjectHarvester.cs
+++ b/src/tools/heat/VSProjectHarvester.cs
diff --git a/src/wix/heat/app.config b/src/tools/heat/app.config
index 65d3d6c3..65d3d6c3 100644
--- a/src/wix/heat/app.config
+++ b/src/tools/heat/app.config
diff --git a/src/wix/heat/heat.csproj b/src/tools/heat/heat.csproj
index 88fd2eb0..b3d38098 100644
--- a/src/wix/heat/heat.csproj
+++ b/src/tools/heat/heat.csproj
@@ -6,10 +6,9 @@
6 <TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks> 6 <TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
7 <OutputType>Exe</OutputType> 7 <OutputType>Exe</OutputType>
8 <Description>Harvester</Description> 8 <Description>Harvester</Description>
9 <Title>WiX Harvester</Title> 9 <Title>WiX Toolset Harvester</Title>
10 <DebugType>embedded</DebugType> 10 <DebugType>embedded</DebugType>
11 <PublishRepositoryUrl>true</PublishRepositoryUrl> 11 <PublishRepositoryUrl>true</PublishRepositoryUrl>
12 <!-- <PackAsTool>true</PackAsTool> -->
13 <RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)'=='' and '$(TargetFramework)'!='netcoreapp3.1' ">win-x86;win-x64</RuntimeIdentifiers> 12 <RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)'=='' and '$(TargetFramework)'!='netcoreapp3.1' ">win-x86;win-x64</RuntimeIdentifiers>
14 <AppConfig>app.config</AppConfig> 13 <AppConfig>app.config</AppConfig>
15 <ApplicationManifest>heat.exe.manifest</ApplicationManifest> 14 <ApplicationManifest>heat.exe.manifest</ApplicationManifest>
@@ -17,10 +16,6 @@
17 </PropertyGroup> 16 </PropertyGroup>
18 17
19 <ItemGroup> 18 <ItemGroup>
20 <Compile Include="..\wix\ConsoleMessageListener.cs" Link="ConsoleMessageListener.cs" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <Compile Update="Serialize\WixHarvesterStrings.Designer.cs"> 19 <Compile Update="Serialize\WixHarvesterStrings.Designer.cs">
25 <DesignTime>True</DesignTime> 20 <DesignTime>True</DesignTime>
26 <AutoGen>True</AutoGen> 21 <AutoGen>True</AutoGen>
@@ -36,8 +31,8 @@
36 </ItemGroup> 31 </ItemGroup>
37 32
38 <ItemGroup> 33 <ItemGroup>
39 <ProjectReference Include="..\WixToolset.Core\WixToolset.Core.csproj" /> 34 <PackageReference Include="WixToolset.Core" />
40 <ProjectReference Include="..\WixToolset.Core.Burn\WixToolset.Core.Burn.csproj" /> 35 <PackageReference Include="WixToolset.Core.Burn" />
41 </ItemGroup> 36 </ItemGroup>
42 37
43 <ItemGroup> 38 <ItemGroup>
diff --git a/src/wix/heat/heat.exe.manifest b/src/tools/heat/heat.exe.manifest
index b4adfbb7..b4adfbb7 100644
--- a/src/wix/heat/heat.exe.manifest
+++ b/src/tools/heat/heat.exe.manifest
diff --git a/src/wix/heat/heat.net461.v3.ncrunchproject b/src/tools/heat/heat.net461.v3.ncrunchproject
index cf22dfa9..cf22dfa9 100644
--- a/src/wix/heat/heat.net461.v3.ncrunchproject
+++ b/src/tools/heat/heat.net461.v3.ncrunchproject
diff --git a/src/wix/heat/heat.netcoreapp2.1.v3.ncrunchproject b/src/tools/heat/heat.netcoreapp2.1.v3.ncrunchproject
index cf22dfa9..cf22dfa9 100644
--- a/src/wix/heat/heat.netcoreapp2.1.v3.ncrunchproject
+++ b/src/tools/heat/heat.netcoreapp2.1.v3.ncrunchproject
diff --git a/src/tools/publish_t.proj b/src/tools/publish_t.proj
new file mode 100644
index 00000000..b23c3d84
--- /dev/null
+++ b/src/tools/publish_t.proj
@@ -0,0 +1,36 @@
1<Project Sdk="Microsoft.Build.Traversal">
2 <PropertyGroup>
3 <StagePublishX86>$(BaseIntermediateOutputPath)$(Configuration)\net472\x86\</StagePublishX86>
4 <StagePublishX64>$(BaseIntermediateOutputPath)$(Configuration)\net472\x64\</StagePublishX64>
5 <StagePublishDnc>$(BaseIntermediateOutputPath)$(Configuration)\netcoreapp3.1\</StagePublishDnc>
6
7 <PublishBuildFolder>$(PublishRoot)WixToolset.Heat\build\</PublishBuildFolder>
8 <PublishHere>$(PublishRoot)WixToolset.Heat\tools\net472\</PublishHere>
9 <PublishX86>$(PublishRoot)WixToolset.Heat\tools\net472\x86\</PublishX86>
10 <PublishX64>$(PublishRoot)WixToolset.Heat\tools\net472\x64\</PublishX64>
11 <PublishDnc>$(PublishRoot)WixToolset.Heat\tools\netcoreapp3.1\</PublishDnc>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <ProjectReference Include="WixToolset.HeatTasks\WixToolset.HeatTasks.csproj" Properties="TargetFramework=net472;PublishDir=$(StagePublishX86)WixToolset.HeatTasks" Targets="Publish" />
16 <ProjectReference Include="WixToolset.HeatTasks\WixToolset.HeatTasks.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(StagePublishDnc)WixToolset.HeatTasks" Targets="Publish" />
17
18 <!-- heat.exe doesn't need to filter any files so publish it straight into its final location -->
19 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(PublishX86)" Targets="Publish" />
20 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(PublishX64)" Targets="Publish" />
21 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(PublishDnc)" Targets="Publish" />
22 </ItemGroup>
23
24 <Target Name="CopyToFinalPublishFolder" AfterTargets="Build">
25 <ItemGroup>
26 <From Include="WixToolset.Heat\WixToolset.Heat.targets" To="$(PublishBuildFolder)" />
27 <From Include="$(StagePublishX86)\WixToolset.HeatTasks\*.*" Exclude="$(StagePublishx86)\WixToolset.HeatTasks\Microsoft.Build.*.dll" To="$(PublishHere)" />
28 <From Include="$(StagePublishDnc)\WixToolset.HeatTasks\*.*" Exclude="$(StagePublishDnc)\WixToolset.HeatTasks\Microsoft.Build.*.dll" To="$(PublishDnc)" />
29 </ItemGroup>
30
31 <Copy SourceFiles="@(From)"
32 DestinationFiles="%(To)%(RecursiveDir)%(Filename)%(Extension)"
33 SkipUnchangedFiles="true"
34 UseHardlinksIfPossible="true" />
35 </Target>
36</Project>
diff --git a/src/tools/test/Directory.Build.props b/src/tools/test/Directory.Build.props
new file mode 100644
index 00000000..a0c9a659
--- /dev/null
+++ b/src/tools/test/Directory.Build.props
@@ -0,0 +1,10 @@
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>
5 <Import Project="..\Directory.Build.props" />
6
7 <PropertyGroup>
8 <OutputPath>$(OutputPath)test\$(ProjectName)</OutputPath>
9 </PropertyGroup>
10</Project>
diff --git a/src/wix/test/WixToolsetTest.Heat/HeatRunner.cs b/src/tools/test/WixToolsetTest.Heat/HeatRunner.cs
index 287698a9..287698a9 100644
--- a/src/wix/test/WixToolsetTest.Heat/HeatRunner.cs
+++ b/src/tools/test/WixToolsetTest.Heat/HeatRunner.cs
diff --git a/src/wix/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj b/src/tools/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj
index 1ba62393..73eb078c 100644
--- a/src/wix/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj
+++ b/src/tools/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj
@@ -9,11 +9,6 @@
9 </PropertyGroup> 9 </PropertyGroup>
10 10
11 <ItemGroup> 11 <ItemGroup>
12 <ProjectReference Include="..\..\heat\heat.csproj" />
13 <ProjectReference Include="..\..\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj" />
14 </ItemGroup>
15
16 <ItemGroup>
17 <PackageReference Include="WixBuildTools.TestSupport" /> 12 <PackageReference Include="WixBuildTools.TestSupport" />
18 </ItemGroup> 13 </ItemGroup>
19 14
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs b/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs
index f1fa2453..d54da457 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs
@@ -3,7 +3,6 @@
3namespace WixToolsetTest.Sdk 3namespace WixToolsetTest.Sdk
4{ 4{
5 using System; 5 using System;
6 using System.Collections.Generic;
7 using System.IO; 6 using System.IO;
8 using System.Linq; 7 using System.Linq;
9 using WixBuildTools.TestSupport; 8 using WixBuildTools.TestSupport;
@@ -14,23 +13,34 @@ namespace WixToolsetTest.Sdk
14 13
15 public class MsbuildHeatFixture 14 public class MsbuildHeatFixture
16 { 15 {
16 public static readonly string HeatTargetsPath = Path.Combine(Path.GetDirectoryName(new Uri(typeof(MsbuildHeatFixture).Assembly.CodeBase).AbsolutePath), "..", "..", "..", "publish", "WixToolset.Heat", "build", "WixToolset.Heat.targets");
17
18 public MsbuildHeatFixture()
19 {
20 EnsureWixSdkCached();
21 }
22
17 [Theory] 23 [Theory]
18 [InlineData(BuildSystem.DotNetCoreSdk)] 24 [InlineData(BuildSystem.DotNetCoreSdk)]
19 [InlineData(BuildSystem.MSBuild)] 25 [InlineData(BuildSystem.MSBuild)]
20 [InlineData(BuildSystem.MSBuild64)] 26 [InlineData(BuildSystem.MSBuild64)]
21 public void CanBuildHeatFilePackage(BuildSystem buildSystem) 27 public void CanBuildHeatFilePackage(BuildSystem buildSystem)
22 { 28 {
23 var sourceFolder = TestData.Get(@"TestData\HeatFilePackage"); 29 var sourceFolder = TestData.Get("TestData", "HeatFilePackage");
24 30
25 using (var fs = new TestDataFolderFileSystem()) 31 using (var fs = new DisposableFileSystem())
26 { 32 {
27 fs.Initialize(sourceFolder); 33 var baseFolder = fs.GetFolder();
28 var baseFolder = fs.BaseFolder; 34 var binFolder = Path.Combine(baseFolder, @"bin");
29 var binFolder = Path.Combine(baseFolder, @"bin\");
30 var intermediateFolder = Path.Combine(baseFolder, @"obj\"); 35 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
31 var projectPath = Path.Combine(baseFolder, "HeatFilePackage.wixproj"); 36 var projectPath = Path.Combine(sourceFolder, "HeatFilePackage.wixproj");
32 37
33 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); 38 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
39 "-Restore",
40 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "HeatTargetsPath", MsbuildHeatFixture.HeatTargetsPath),
41 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "BaseIntermediateOutputPath", intermediateFolder),
42 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "OutputPath", binFolder),
43 });
34 result.AssertSuccess(); 44 result.AssertSuccess();
35 45
36 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true); 46 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true);
@@ -39,9 +49,7 @@ namespace WixToolsetTest.Sdk
39 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 49 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
40 WixAssert.StringCollectionEmpty(warnings); 50 WixAssert.StringCollectionEmpty(warnings);
41 51
42 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_ProductComponents_INSTALLFOLDER_HeatFilePackage.wixproj_file.wxs"); 52 var generatedFilePath = Path.Combine(intermediateFolder, "Release", "_ProductComponents_INSTALLFOLDER_HeatFilePackage.wixproj_file.wxs");
43 Assert.True(File.Exists(generatedFilePath));
44
45 var generatedContents = File.ReadAllText(generatedFilePath); 53 var generatedContents = File.ReadAllText(generatedFilePath);
46 var testXml = generatedContents.GetTestXml(); 54 var testXml = generatedContents.GetTestXml();
47 WixAssert.StringEqual(@"<Wix>" + 55 WixAssert.StringEqual(@"<Wix>" +
@@ -59,9 +67,7 @@ namespace WixToolsetTest.Sdk
59 "</Fragment>" + 67 "</Fragment>" +
60 "</Wix>", testXml); 68 "</Wix>", testXml);
61 69
62 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatFilePackage.wixpdb"); 70 var pdbPath = Path.Combine(binFolder, "HeatFilePackage.wixpdb");
63 Assert.True(File.Exists(pdbPath));
64
65 var intermediate = Intermediate.Load(pdbPath); 71 var intermediate = Intermediate.Load(pdbPath);
66 var section = intermediate.Sections.Single(); 72 var section = intermediate.Sections.Single();
67 73
@@ -76,17 +82,21 @@ namespace WixToolsetTest.Sdk
76 [InlineData(BuildSystem.MSBuild64)] 82 [InlineData(BuildSystem.MSBuild64)]
77 public void CanBuildHeatFileWithMultipleFilesPackage(BuildSystem buildSystem) 83 public void CanBuildHeatFileWithMultipleFilesPackage(BuildSystem buildSystem)
78 { 84 {
79 var sourceFolder = TestData.Get(@"TestData\HeatFileMultipleFilesSameFileName"); 85 var sourceFolder = TestData.Get(@"TestData", "HeatFileMultipleFilesSameFileName");
80 86
81 using (var fs = new TestDataFolderFileSystem()) 87 using (var fs = new DisposableFileSystem())
82 { 88 {
83 fs.Initialize(sourceFolder); 89 var baseFolder = fs.GetFolder();
84 var baseFolder = fs.BaseFolder;
85 var binFolder = Path.Combine(baseFolder, @"bin\"); 90 var binFolder = Path.Combine(baseFolder, @"bin\");
86 var intermediateFolder = Path.Combine(baseFolder, @"obj\"); 91 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
87 var projectPath = Path.Combine(baseFolder, "HeatFileMultipleFilesSameFileName.wixproj"); 92 var projectPath = Path.Combine(sourceFolder, "HeatFileMultipleFilesSameFileName.wixproj");
88 93
89 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); 94 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
95 "-Restore",
96 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "HeatTargetsPath", MsbuildHeatFixture.HeatTargetsPath),
97 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "BaseIntermediateOutputPath", intermediateFolder),
98 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "OutputPath", binFolder),
99 });
90 result.AssertSuccess(); 100 result.AssertSuccess();
91 101
92 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true); 102 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true);
@@ -95,7 +105,7 @@ namespace WixToolsetTest.Sdk
95 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 105 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
96 WixAssert.StringCollectionEmpty(warnings); 106 WixAssert.StringCollectionEmpty(warnings);
97 107
98 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_TxtProductComponents_INSTALLFOLDER_MyProgram.txt_file.wxs"); 108 var generatedFilePath = Path.Combine(intermediateFolder, "Release", "_TxtProductComponents_INSTALLFOLDER_MyProgram.txt_file.wxs");
99 Assert.True(File.Exists(generatedFilePath)); 109 Assert.True(File.Exists(generatedFilePath));
100 110
101 var generatedContents = File.ReadAllText(generatedFilePath); 111 var generatedContents = File.ReadAllText(generatedFilePath);
@@ -115,7 +125,7 @@ namespace WixToolsetTest.Sdk
115 "</Fragment>" + 125 "</Fragment>" +
116 "</Wix>", testXml); 126 "</Wix>", testXml);
117 127
118 generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_JsonProductComponents_INSTALLFOLDER_MyProgram.json_file.wxs"); 128 generatedFilePath = Path.Combine(intermediateFolder, "Release", "_JsonProductComponents_INSTALLFOLDER_MyProgram.json_file.wxs");
119 Assert.True(File.Exists(generatedFilePath)); 129 Assert.True(File.Exists(generatedFilePath));
120 130
121 generatedContents = File.ReadAllText(generatedFilePath); 131 generatedContents = File.ReadAllText(generatedFilePath);
@@ -135,7 +145,7 @@ namespace WixToolsetTest.Sdk
135 "</Fragment>" + 145 "</Fragment>" +
136 "</Wix>", testXml); 146 "</Wix>", testXml);
137 147
138 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatFileMultipleFilesSameFileName.wixpdb"); 148 var pdbPath = Path.Combine(binFolder, "HeatFileMultipleFilesSameFileName.wixpdb");
139 Assert.True(File.Exists(pdbPath)); 149 Assert.True(File.Exists(pdbPath));
140 150
141 var intermediate = Intermediate.Load(pdbPath); 151 var intermediate = Intermediate.Load(pdbPath);
@@ -156,11 +166,13 @@ namespace WixToolsetTest.Sdk
156 [InlineData(BuildSystem.MSBuild64, false)] 166 [InlineData(BuildSystem.MSBuild64, false)]
157 public void CanBuildHeatProjectPreSdkStyle(BuildSystem buildSystem, bool useToolsVersion) 167 public void CanBuildHeatProjectPreSdkStyle(BuildSystem buildSystem, bool useToolsVersion)
158 { 168 {
159 var sourceFolder = TestData.Get(@"TestData\HeatProject"); 169 var sourceFolder = TestData.Get(@"TestData", "HeatProject");
160 170
161 using (var fs = new TestDataFolderFileSystem()) 171 using (var fs = new TestDataFolderFileSystem())
162 { 172 {
163 fs.Initialize(sourceFolder); 173 fs.Initialize(sourceFolder);
174 File.Copy("global.json", Path.Combine(fs.BaseFolder, "global.json"));
175
164 var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectPreSdkStyle"); 176 var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectPreSdkStyle");
165 var binFolder = Path.Combine(baseFolder, @"bin\"); 177 var binFolder = Path.Combine(baseFolder, @"bin\");
166 var intermediateFolder = Path.Combine(baseFolder, @"obj\"); 178 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
@@ -168,8 +180,9 @@ namespace WixToolsetTest.Sdk
168 180
169 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 181 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
170 { 182 {
171 useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty, 183 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "HeatTargetsPath", MsbuildHeatFixture.HeatTargetsPath),
172 }); 184 useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty,
185 });
173 result.AssertSuccess(); 186 result.AssertSuccess();
174 187
175 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); 188 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true);
@@ -187,7 +200,7 @@ namespace WixToolsetTest.Sdk
187 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 200 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
188 WixAssert.StringCollectionEmpty(warnings); 201 WixAssert.StringCollectionEmpty(warnings);
189 202
190 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_ToolsVersion4Cs.wxs"); 203 var generatedFilePath = Path.Combine(intermediateFolder, "Release", "_ToolsVersion4Cs.wxs");
191 Assert.True(File.Exists(generatedFilePath)); 204 Assert.True(File.Exists(generatedFilePath));
192 205
193 var generatedContents = File.ReadAllText(generatedFilePath); 206 var generatedContents = File.ReadAllText(generatedFilePath);
@@ -246,7 +259,7 @@ namespace WixToolsetTest.Sdk
246 "</Fragment>" + 259 "</Fragment>" +
247 "</Wix>", testXml); 260 "</Wix>", testXml);
248 261
249 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatProjectPreSdkStyle.wixpdb"); 262 var pdbPath = Path.Combine(binFolder, "Release", "HeatProjectPreSdkStyle.wixpdb");
250 Assert.True(File.Exists(pdbPath)); 263 Assert.True(File.Exists(pdbPath));
251 264
252 var intermediate = Intermediate.Load(pdbPath); 265 var intermediate = Intermediate.Load(pdbPath);
@@ -271,22 +284,26 @@ namespace WixToolsetTest.Sdk
271 using (var fs = new TestDataFolderFileSystem()) 284 using (var fs = new TestDataFolderFileSystem())
272 { 285 {
273 fs.Initialize(sourceFolder); 286 fs.Initialize(sourceFolder);
287 File.Copy("global.json", Path.Combine(fs.BaseFolder, "global.json"));
288
274 var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectSdkStyle"); 289 var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectSdkStyle");
275 var binFolder = Path.Combine(baseFolder, @"bin\"); 290 var binFolder = Path.Combine(baseFolder, @"bin\");
276 var intermediateFolder = Path.Combine(baseFolder, @"obj\"); 291 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
277 var projectPath = Path.Combine(baseFolder, "HeatProjectSdkStyle.wixproj"); 292 var projectPath = Path.Combine(fs.BaseFolder, "HeatProjectSdkStyle", "HeatProjectSdkStyle.wixproj");
278 var referencedProjectPath = Path.Combine(fs.BaseFolder, "SdkStyleCs", "SdkStyleCs.csproj"); 293 var referencedProjectPath = Path.Combine(fs.BaseFolder, "SdkStyleCs", "SdkStyleCs.csproj");
279 294
280 var result = MsbuildUtilities.BuildProject(buildSystem, referencedProjectPath, new[] 295 var result = MsbuildUtilities.BuildProject(buildSystem, referencedProjectPath, new[]
281 { 296 {
282 "-t:restore", 297 "-t:restore",
283 }); 298 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "HeatTargetsPath", MsbuildHeatFixture.HeatTargetsPath),
299 });
284 result.AssertSuccess(); 300 result.AssertSuccess();
285 301
286 result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 302 result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
287 { 303 {
288 useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty, 304 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "HeatTargetsPath", MsbuildHeatFixture.HeatTargetsPath),
289 }); 305 useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty,
306 });
290 result.AssertSuccess(); 307 result.AssertSuccess();
291 308
292 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); 309 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true);
@@ -304,7 +321,7 @@ namespace WixToolsetTest.Sdk
304 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 321 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
305 WixAssert.StringCollectionEmpty(warnings); 322 WixAssert.StringCollectionEmpty(warnings);
306 323
307 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_SdkStyleCs.wxs"); 324 var generatedFilePath = Path.Combine(intermediateFolder, "Release", "_SdkStyleCs.wxs");
308 Assert.True(File.Exists(generatedFilePath)); 325 Assert.True(File.Exists(generatedFilePath));
309 326
310 var generatedContents = File.ReadAllText(generatedFilePath); 327 var generatedContents = File.ReadAllText(generatedFilePath);
@@ -361,7 +378,7 @@ namespace WixToolsetTest.Sdk
361 "</Fragment>" + 378 "</Fragment>" +
362 "</Wix>", testXml); 379 "</Wix>", testXml);
363 380
364 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatProjectSdkStyle.wixpdb"); 381 var pdbPath = Path.Combine(binFolder, "Release", "HeatProjectSdkStyle.wixpdb");
365 Assert.True(File.Exists(pdbPath)); 382 Assert.True(File.Exists(pdbPath));
366 383
367 var intermediate = Intermediate.Load(pdbPath); 384 var intermediate = Intermediate.Load(pdbPath);
@@ -371,5 +388,23 @@ namespace WixToolsetTest.Sdk
371 WixAssert.StringEqual(Path.Combine(fs.BaseFolder, "SdkStyleCs", "bin", "Release", "netstandard2.0\\\\SdkStyleCs.dll"), fileSymbol[FileSymbolFields.Source].AsPath()?.Path); 388 WixAssert.StringEqual(Path.Combine(fs.BaseFolder, "SdkStyleCs", "bin", "Release", "netstandard2.0\\\\SdkStyleCs.dll"), fileSymbol[FileSymbolFields.Source].AsPath()?.Path);
372 } 389 }
373 } 390 }
391
392 /// <summary>
393 /// This method exists to get the WixToolset.Sdk.nupkg into the NuGet package cache using the global.json
394 /// and nuget.config in the root of the repository. By pre-caching the WiX SDK, the rest of the tests will
395 /// pull the binaries out of the cache instead of needing to find the original .nupkg in the build artifacts
396 /// folder (which requires use of nuget.config found in the root of the repo)
397 /// </summary>
398 private static void EnsureWixSdkCached()
399 {
400 // This EnsureWixSdkCached project exists only to pre-cache the WixToolset.Sdk for use by later projects.
401 var sourceFolder = TestData.Get("TestData", "EnsureWixSdkCached");
402
403 var result = MsbuildUtilities.BuildProject(BuildSystem.DotNetCoreSdk, Path.Combine(sourceFolder, "EnsureWixSdkCached.wixproj"), new[]
404 {
405 "-t:restore",
406 });
407 result.AssertSuccess();
408 }
374 } 409 }
375} 410}
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/TestData/EnsureWixSdkCached/EnsureWixSdkCached.wixproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/EnsureWixSdkCached/EnsureWixSdkCached.wixproj
new file mode 100644
index 00000000..7730425f
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/EnsureWixSdkCached/EnsureWixSdkCached.wixproj
@@ -0,0 +1,4 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project Sdk="WixToolset.Sdk">
3 <!-- This project exists only to pre-cache the WixToolset.Sdk for use by the other test data projects. -->
4</Project>
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj
new file mode 100644
index 00000000..2aaf5c01
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj
@@ -0,0 +1,26 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project Sdk="WixToolset.Sdk">
3
4 <ItemGroup>
5 <BindInputPaths Include="." />
6 </ItemGroup>
7
8 <PropertyGroup>
9 <HarvestFileSuppressUniqueIds>true</HarvestFileSuppressUniqueIds>
10 </PropertyGroup>
11
12 <ItemGroup>
13 <HarvestFile Include="MyProgram.txt">
14 <ComponentGroupName>TxtProductComponents</ComponentGroupName>
15 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
16 <SuppressRootDirectory>true</SuppressRootDirectory>
17 </HarvestFile>
18 <HarvestFile Include="MyProgram.json">
19 <ComponentGroupName>JsonProductComponents</ComponentGroupName>
20 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
21 <SuppressRootDirectory>true</SuppressRootDirectory>
22 </HarvestFile>
23 </ItemGroup>
24
25 <Import Project="$(HeatTargetsPath)" />
26</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json
index 5f282702..5f282702 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.json
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt
index 5f282702..5f282702 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/MyProgram.txt
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/Package.wxs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/Package.wxs
index 5abcee9f..5abcee9f 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/Package.wxs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFileMultipleFilesSameFileName/Package.wxs
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/HeatFilePackage.wixproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/HeatFilePackage.wixproj
new file mode 100644
index 00000000..345832cf
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/HeatFilePackage.wixproj
@@ -0,0 +1,21 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project Sdk="WixToolset.Sdk">
3
4 <ItemGroup>
5 <BindInputPaths Include="." />
6 </ItemGroup>
7
8 <PropertyGroup>
9 <HarvestFileSuppressUniqueIds>true</HarvestFileSuppressUniqueIds>
10 </PropertyGroup>
11
12 <ItemGroup>
13 <HarvestFile Include="HeatFilePackage.wixproj">
14 <ComponentGroupName>ProductComponents</ComponentGroupName>
15 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
16 <SuppressRootDirectory>true</SuppressRootDirectory>
17 </HarvestFile>
18 </ItemGroup>
19
20 <Import Project="$(HeatTargetsPath)" />
21</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/Package.wxs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/Package.wxs
index f5fa8cf6..f5fa8cf6 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/Package.wxs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatFilePackage/Package.wxs
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj
new file mode 100644
index 00000000..a05348a5
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj
@@ -0,0 +1,18 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project Sdk="WixToolset.Sdk">
3
4 <ItemGroup>
5 <BindInputPaths Include="." />
6 </ItemGroup>
7
8 <PropertyGroup>
9 <EnableProjectHarvesting>true</EnableProjectHarvesting>
10 <HarvestProjectsSuppressUniqueIds>true</HarvestProjectsSuppressUniqueIds>
11 </PropertyGroup>
12
13 <ItemGroup>
14 <ProjectReference Include="..\ToolsVersion4Cs\ToolsVersion4Cs.csproj" />
15 </ItemGroup>
16
17 <Import Project="$(HeatTargetsPath)" />
18</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs
index 6c12861b..6c12861b 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj
new file mode 100644
index 00000000..202921fe
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj
@@ -0,0 +1,18 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project Sdk="WixToolset.Sdk">
3
4 <ItemGroup>
5 <BindInputPaths Include="." />
6 </ItemGroup>
7
8 <PropertyGroup>
9 <EnableProjectHarvesting>true</EnableProjectHarvesting>
10 <HarvestProjectsSuppressUniqueIds>true</HarvestProjectsSuppressUniqueIds>
11 </PropertyGroup>
12
13 <ItemGroup>
14 <ProjectReference Include="..\SdkStyleCs\SdkStyleCs.csproj" />
15 </ItemGroup>
16
17 <Import Project="$(HeatTargetsPath)" />
18</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs
index d30218f3..d30218f3 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs
index 2b2c5be2..2b2c5be2 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj
index 755976bc..755976bc 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs
index c29a2303..c29a2303 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj
index e5723ea2..e5723ea2 100644
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj
+++ b/src/tools/test/WixToolsetTest.HeatTasks/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.csproj b/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.csproj
new file mode 100644
index 00000000..c0c7c903
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.csproj
@@ -0,0 +1,28 @@
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 Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>net472</TargetFramework>
7 <IsPackable>false</IsPackable>
8 <DebugType>embedded</DebugType>
9 <DefaultItemExcludes>TestData\**;$(DefaultItemExcludes)</DefaultItemExcludes>
10 <SignOutput>false</SignOutput>
11 </PropertyGroup>
12
13 <ItemGroup>
14 <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
15 <Content Include="..\..\..\..\global.json" CopyToOutputDirectory="PreserveNewest" />
16 </ItemGroup>
17
18 <ItemGroup>
19 <PackageReference Include="WixBuildTools.TestSupport" />
20 <PackageReference Include="WixToolset.Core.TestPackage" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <PackageReference Include="Microsoft.NET.Test.Sdk" />
25 <PackageReference Include="xunit" />
26 <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" />
27 </ItemGroup>
28</Project>
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.v3.ncrunchproject b/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.v3.ncrunchproject
new file mode 100644
index 00000000..319cd523
--- /dev/null
+++ b/src/tools/test/WixToolsetTest.HeatTasks/WixToolsetTest.HeatTasks.v3.ncrunchproject
@@ -0,0 +1,5 @@
1<ProjectConfiguration>
2 <Settings>
3 <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
4 </Settings>
5</ProjectConfiguration> \ No newline at end of file
diff --git a/src/tools/thmviewer/thmviewer.v3.ncrunchproject b/src/tools/thmviewer/thmviewer.v3.ncrunchproject
index 3cffd6ce..1d0a6a6c 100644
--- a/src/tools/thmviewer/thmviewer.v3.ncrunchproject
+++ b/src/tools/thmviewer/thmviewer.v3.ncrunchproject
@@ -3,5 +3,6 @@
3 <AdditionalFilesToIncludeForProject> 3 <AdditionalFilesToIncludeForProject>
4 <Value>thmviewer.manifest</Value> 4 <Value>thmviewer.manifest</Value>
5 </AdditionalFilesToIncludeForProject> 5 </AdditionalFilesToIncludeForProject>
6 <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
6 </Settings> 7 </Settings>
7</ProjectConfiguration> \ No newline at end of file 8</ProjectConfiguration> \ No newline at end of file
diff --git a/src/tools/tools.cmd b/src/tools/tools.cmd
index 4764a8fe..125bf298 100644
--- a/src/tools/tools.cmd
+++ b/src/tools/tools.cmd
@@ -2,17 +2,40 @@
2@pushd %~dp0 2@pushd %~dp0
3 3
4@set _C=Debug 4@set _C=Debug
5@set _L=%~dp0..\..\build\logs
6
5:parse_args 7:parse_args
6@if /i "%1"=="release" set _C=Release 8@if /i "%1"=="release" set _C=Release
9@if /i "%1"=="inc" set _INCREMENTAL=1
10@if /i "%1"=="clean" set _INCREMENTAL= & set _CLEAN=1
7@if not "%1"=="" shift & goto parse_args 11@if not "%1"=="" shift & goto parse_args
8 12
13:: Clean
14@if NOT "%_INCREMENTAL%"=="" call :clean
15@if NOT "%_CLEAN%"=="" goto :end
16
9@echo Building tools %_C% 17@echo Building tools %_C%
10 18
11:: tools 19:: Build
20msbuild -Restore tools.sln -p:Configuration=%_C% -nologo -m -warnaserror -bl:..\..\build\logs\tools_build.binlog || exit /b
21
22:: Publish
23msbuild publish_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\tools_publish.binlog || exit /b
24
25:: Test
26dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.HeatTasks -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.HeatTasks.trx" || exit /b
27
28:: Pack
29msbuild -t:Pack WixToolset.Heat -p:Configuration=%_C% -p:NoBuild=true -nologo -m -warnaserror -bl:..\..\build\logs\tools_pack.binlog || exit /b
12 30
13nuget restore || exit /b 31@goto :end
14 32
15msbuild -t:Build -p:Configuration=%_C% -nologo -m -warnaserror -bl:..\..\build\logs\tools_build.binlog || exit /b 33:clean
34@rd /s/q "..\..\build\tools" 2> nul
35@del "..\..\build\artifacts\WixToolset.Heat.*.nupkg" 2> nul
36@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.heat" 2> nul
37@exit /b
16 38
39:end
17@popd 40@popd
18@endlocal 41@endlocal
diff --git a/src/tools/tools.sln b/src/tools/tools.sln
index 4da1e8fd..4df8367e 100644
--- a/src/tools/tools.sln
+++ b/src/tools/tools.sln
@@ -1,11 +1,20 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00 1Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio Version 16 2# Visual Studio Version 17
4VisualStudioVersion = 16.0.30711.63 3VisualStudioVersion = 17.2.32616.157
5MinimumVisualStudioVersion = 15.0.26124.0 4MinimumVisualStudioVersion = 15.0.26124.0
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thmviewer", "thmviewer\thmviewer.vcxproj", "{95228C13-97F5-484A-B4A2-ECF4618B0881}" 5Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thmviewer", "thmviewer\thmviewer.vcxproj", "{95228C13-97F5-484A-B4A2-ECF4618B0881}"
7EndProject 6EndProject
8Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixToolset.Templates", "WixToolset.Templates\WixToolset.Templates.csproj", "{D1385232-CA10-4092-BAB5-4E5499FE144C}" 7Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Templates", "WixToolset.Templates\WixToolset.Templates.csproj", "{D1385232-CA10-4092-BAB5-4E5499FE144C}"
8EndProject
9Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Heat", "WixToolset.Heat\WixToolset.Heat.csproj", "{4B301D2D-43D3-4000-8132-36C5A1E9F8F0}"
10EndProject
11Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "heat", "heat\heat.csproj", "{6C747707-29DE-429E-87A4-F6F81DD146C6}"
12EndProject
13Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F7A815A5-37AE-4EC4-A6D6-B29565055668}"
14EndProject
15Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.HeatTasks", "WixToolset.HeatTasks\WixToolset.HeatTasks.csproj", "{EBDCA232-17CD-40CE-B592-CD7230388BEF}"
16EndProject
17Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.HeatTasks", "test\WixToolsetTest.HeatTasks\WixToolsetTest.HeatTasks.csproj", "{3FB7F972-31A6-4929-B6BF-EACEC659A7D3}"
9EndProject 18EndProject
10Global 19Global
11 GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -30,10 +39,45 @@ Global
30 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|Any CPU.Build.0 = Release|Any CPU 39 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|Any CPU.Build.0 = Release|Any CPU
31 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|x86.ActiveCfg = Release|Any CPU 40 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|x86.ActiveCfg = Release|Any CPU
32 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|x86.Build.0 = Release|Any CPU 41 {D1385232-CA10-4092-BAB5-4E5499FE144C}.Release|x86.Build.0 = Release|Any CPU
42 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
44 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Debug|x86.ActiveCfg = Debug|Any CPU
45 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Debug|x86.Build.0 = Debug|Any CPU
46 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
47 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Release|Any CPU.Build.0 = Release|Any CPU
48 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Release|x86.ActiveCfg = Release|Any CPU
49 {4B301D2D-43D3-4000-8132-36C5A1E9F8F0}.Release|x86.Build.0 = Release|Any CPU
50 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
51 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
52 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Debug|x86.ActiveCfg = Debug|Any CPU
53 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Debug|x86.Build.0 = Debug|Any CPU
54 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
55 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Release|Any CPU.Build.0 = Release|Any CPU
56 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Release|x86.ActiveCfg = Release|Any CPU
57 {6C747707-29DE-429E-87A4-F6F81DD146C6}.Release|x86.Build.0 = Release|Any CPU
58 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
59 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
60 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Debug|x86.ActiveCfg = Debug|Any CPU
61 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Debug|x86.Build.0 = Debug|Any CPU
62 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
63 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Release|Any CPU.Build.0 = Release|Any CPU
64 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Release|x86.ActiveCfg = Release|Any CPU
65 {EBDCA232-17CD-40CE-B592-CD7230388BEF}.Release|x86.Build.0 = Release|Any CPU
66 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
67 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
68 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Debug|x86.ActiveCfg = Debug|Any CPU
69 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Debug|x86.Build.0 = Debug|Any CPU
70 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
71 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Release|Any CPU.Build.0 = Release|Any CPU
72 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Release|x86.ActiveCfg = Release|Any CPU
73 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3}.Release|x86.Build.0 = Release|Any CPU
33 EndGlobalSection 74 EndGlobalSection
34 GlobalSection(SolutionProperties) = preSolution 75 GlobalSection(SolutionProperties) = preSolution
35 HideSolutionNode = FALSE 76 HideSolutionNode = FALSE
36 EndGlobalSection 77 EndGlobalSection
78 GlobalSection(NestedProjects) = preSolution
79 {3FB7F972-31A6-4929-B6BF-EACEC659A7D3} = {F7A815A5-37AE-4EC4-A6D6-B29565055668}
80 EndGlobalSection
37 GlobalSection(ExtensibilityGlobals) = postSolution 81 GlobalSection(ExtensibilityGlobals) = postSolution
38 SolutionGuid = {537F1116-39FE-4AED-A9A2-35030E5750D5} 82 SolutionGuid = {537F1116-39FE-4AED-A9A2-35030E5750D5}
39 EndGlobalSection 83 EndGlobalSection
diff --git a/src/tools/tools.v3.ncrunchsolution b/src/tools/tools.v3.ncrunchsolution
new file mode 100644
index 00000000..10420ac9
--- /dev/null
+++ b/src/tools/tools.v3.ncrunchsolution
@@ -0,0 +1,6 @@
1<SolutionConfiguration>
2 <Settings>
3 <AllowParallelTestExecution>True</AllowParallelTestExecution>
4 <SolutionConfigured>True</SolutionConfigured>
5 </Settings>
6</SolutionConfiguration> \ No newline at end of file
diff --git a/src/wix/WixToolset.BuildTasks/HeatDirectory.cs b/src/wix/WixToolset.BuildTasks/HeatDirectory.cs
deleted file mode 100644
index 79da303a..00000000
--- a/src/wix/WixToolset.BuildTasks/HeatDirectory.cs
+++ /dev/null
@@ -1,96 +0,0 @@
1// 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.
2
3namespace WixToolset.BuildTasks
4{
5 using Microsoft.Build.Framework;
6
7 public sealed class HeatDirectory : HeatTask
8 {
9 private string directory;
10 private bool keepEmptyDirectories;
11 private bool suppressCom;
12 private bool suppressRootDirectory;
13 private bool suppressRegistry;
14 private string template;
15 private string componentGroupName;
16 private string directoryRefId;
17 private string preprocessorVariable;
18
19 public string ComponentGroupName
20 {
21 get { return this.componentGroupName; }
22 set { this.componentGroupName = value; }
23 }
24
25 [Required]
26 public string Directory
27 {
28 get { return this.directory; }
29 set { this.directory = value; }
30 }
31
32 public string DirectoryRefId
33 {
34 get { return this.directoryRefId; }
35 set { this.directoryRefId = value; }
36 }
37
38 public bool KeepEmptyDirectories
39 {
40 get { return this.keepEmptyDirectories; }
41 set { this.keepEmptyDirectories = value; }
42 }
43
44 public string PreprocessorVariable
45 {
46 get { return this.preprocessorVariable; }
47 set { this.preprocessorVariable = value; }
48 }
49
50 public bool SuppressCom
51 {
52 get { return this.suppressCom; }
53 set { this.suppressCom = value; }
54 }
55
56 public bool SuppressRootDirectory
57 {
58 get { return this.suppressRootDirectory; }
59 set { this.suppressRootDirectory = value; }
60 }
61
62 public bool SuppressRegistry
63 {
64 get { return this.suppressRegistry; }
65 set { this.suppressRegistry = value; }
66 }
67
68 public string Template
69 {
70 get { return this.template; }
71 set { this.template = value; }
72 }
73
74 protected override string OperationName
75 {
76 get { return "dir"; }
77 }
78
79 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
80 {
81 commandLineBuilder.AppendSwitch(this.OperationName);
82 commandLineBuilder.AppendFileNameIfNotNull(this.Directory);
83
84 commandLineBuilder.AppendSwitchIfNotNull("-cg ", this.ComponentGroupName);
85 commandLineBuilder.AppendSwitchIfNotNull("-dr ", this.DirectoryRefId);
86 commandLineBuilder.AppendIfTrue("-ke", this.KeepEmptyDirectories);
87 commandLineBuilder.AppendIfTrue("-scom", this.SuppressCom);
88 commandLineBuilder.AppendIfTrue("-sreg", this.SuppressRegistry);
89 commandLineBuilder.AppendIfTrue("-srd", this.SuppressRootDirectory);
90 commandLineBuilder.AppendSwitchIfNotNull("-template ", this.Template);
91 commandLineBuilder.AppendSwitchIfNotNull("-var ", this.PreprocessorVariable);
92
93 base.BuildCommandLine(commandLineBuilder);
94 }
95 }
96}
diff --git a/src/wix/WixToolset.BuildTasks/HeatFile.cs b/src/wix/WixToolset.BuildTasks/HeatFile.cs
deleted file mode 100644
index 57fe579d..00000000
--- a/src/wix/WixToolset.BuildTasks/HeatFile.cs
+++ /dev/null
@@ -1,88 +0,0 @@
1// 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.
2
3namespace WixToolset.BuildTasks
4{
5 using Microsoft.Build.Framework;
6
7 public sealed class HeatFile : HeatTask
8 {
9 private string file;
10 private bool suppressCom;
11 private bool suppressRegistry;
12 private bool suppressRootDirectory;
13 private string template;
14 private string componentGroupName;
15 private string directoryRefId;
16 private string preprocessorVariable;
17
18 public string ComponentGroupName
19 {
20 get { return this.componentGroupName; }
21 set { this.componentGroupName = value; }
22 }
23
24 public string DirectoryRefId
25 {
26 get { return this.directoryRefId; }
27 set { this.directoryRefId = value; }
28 }
29
30 [Required]
31 public string File
32 {
33 get { return this.file; }
34 set { this.file = value; }
35 }
36
37 public string PreprocessorVariable
38 {
39 get { return this.preprocessorVariable; }
40 set { this.preprocessorVariable = value; }
41 }
42
43 public bool SuppressCom
44 {
45 get { return this.suppressCom; }
46 set { this.suppressCom = value; }
47 }
48
49 public bool SuppressRegistry
50 {
51 get { return this.suppressRegistry; }
52 set { this.suppressRegistry = value; }
53 }
54
55 public bool SuppressRootDirectory
56 {
57 get { return this.suppressRootDirectory; }
58 set { this.suppressRootDirectory = value; }
59 }
60
61 public string Template
62 {
63 get { return this.template; }
64 set { this.template = value; }
65 }
66
67 protected override string OperationName
68 {
69 get { return "file"; }
70 }
71
72 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
73 {
74 commandLineBuilder.AppendSwitch(this.OperationName);
75 commandLineBuilder.AppendFileNameIfNotNull(this.File);
76
77 commandLineBuilder.AppendSwitchIfNotNull("-cg ", this.ComponentGroupName);
78 commandLineBuilder.AppendSwitchIfNotNull("-dr ", this.DirectoryRefId);
79 commandLineBuilder.AppendIfTrue("-scom", this.SuppressCom);
80 commandLineBuilder.AppendIfTrue("-srd", this.SuppressRootDirectory);
81 commandLineBuilder.AppendIfTrue("-sreg", this.SuppressRegistry);
82 commandLineBuilder.AppendSwitchIfNotNull("-template ", this.Template);
83 commandLineBuilder.AppendSwitchIfNotNull("-var ", this.PreprocessorVariable);
84
85 base.BuildCommandLine(commandLineBuilder);
86 }
87 }
88}
diff --git a/src/wix/WixToolset.BuildTasks/HeatTask.cs b/src/wix/WixToolset.BuildTasks/HeatTask.cs
deleted file mode 100644
index 18c08342..00000000
--- a/src/wix/WixToolset.BuildTasks/HeatTask.cs
+++ /dev/null
@@ -1,91 +0,0 @@
1// 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.
2
3namespace WixToolset.BuildTasks
4{
5 using Microsoft.Build.Framework;
6
7 /// <summary>
8 /// A base MSBuild task to run the WiX harvester.
9 /// Specific harvester tasks should extend this class.
10 /// </summary>
11 public abstract partial class HeatTask : ToolsetTask
12 {
13 private bool autogenerageGuids;
14 private bool generateGuidsNow;
15 private ITaskItem outputFile;
16 private bool suppressFragments;
17 private bool suppressUniqueIds;
18 private string[] transforms;
19
20 public HeatTask()
21 {
22 this.RunAsSeparateProcess = true;
23 }
24
25 public bool AutogenerateGuids
26 {
27 get { return this.autogenerageGuids; }
28 set { this.autogenerageGuids = value; }
29 }
30
31 public bool GenerateGuidsNow
32 {
33 get { return this.generateGuidsNow; }
34 set { this.generateGuidsNow = value; }
35 }
36
37 [Required]
38 [Output]
39 public ITaskItem OutputFile
40 {
41 get { return this.outputFile; }
42 set { this.outputFile = value; }
43 }
44
45 public bool SuppressFragments
46 {
47 get { return this.suppressFragments; }
48 set { this.suppressFragments = value; }
49 }
50
51 public bool SuppressUniqueIds
52 {
53 get { return this.suppressUniqueIds; }
54 set { this.suppressUniqueIds = value; }
55 }
56
57 public string[] Transforms
58 {
59 get { return this.transforms; }
60 set { this.transforms = value; }
61 }
62
63 protected sealed override string ToolName => "heat.exe";
64
65 /// <summary>
66 /// Gets the name of the heat operation performed by the task.
67 /// </summary>
68 /// <remarks>This is the first parameter passed on the heat.exe command-line.</remarks>
69 /// <value>The name of the heat operation performed by the task.</value>
70 protected abstract string OperationName
71 {
72 get;
73 }
74
75 /// <summary>
76 /// Builds a command line from options in this task.
77 /// </summary>
78 protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
79 {
80 base.BuildCommandLine(commandLineBuilder);
81
82 commandLineBuilder.AppendIfTrue("-ag", this.AutogenerateGuids);
83 commandLineBuilder.AppendIfTrue("-gg", this.GenerateGuidsNow);
84 commandLineBuilder.AppendIfTrue("-sfrag", this.SuppressFragments);
85 commandLineBuilder.AppendIfTrue("-suid", this.SuppressUniqueIds);
86 commandLineBuilder.AppendArrayIfNotNull("-t ", this.Transforms);
87 commandLineBuilder.AppendTextIfNotNull(this.AdditionalOptions);
88 commandLineBuilder.AppendSwitchIfNotNull("-out ", this.OutputFile);
89 }
90 }
91}
diff --git a/src/wix/WixToolset.BuildTasks/HeatTask_InProc.cs b/src/wix/WixToolset.BuildTasks/HeatTask_InProc.cs
deleted file mode 100644
index 48ee9e02..00000000
--- a/src/wix/WixToolset.BuildTasks/HeatTask_InProc.cs
+++ /dev/null
@@ -1,20 +0,0 @@
1// 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.
2
3#if !NETCOREAPP
4namespace WixToolset.BuildTasks
5{
6 using System;
7 using System.Threading;
8 using System.Threading.Tasks;
9 using WixToolset.Extensibility.Services;
10
11 public partial class HeatTask
12 {
13 public override bool RunAsSeparateProcess { get => true; }
14
15 protected sealed override string TaskShortName => "HEAT";
16
17 protected sealed override Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider coreProvider, string commandLineString, CancellationToken cancellationToken) => throw new NotImplementedException();
18 }
19}
20#endif
diff --git a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
index b6751ed9..4af6c522 100644
--- a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
+++ b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
@@ -13,7 +13,6 @@
13 <ItemGroup> 13 <ItemGroup>
14 <Content Include="build\$(MSBuildThisFileName).props" CopyToOutputDirectory="PreserveNewest" /> 14 <Content Include="build\$(MSBuildThisFileName).props" CopyToOutputDirectory="PreserveNewest" />
15 <Content Include="build\$(MSBuildThisFileName).targets" CopyToOutputDirectory="PreserveNewest" /> 15 <Content Include="build\$(MSBuildThisFileName).targets" CopyToOutputDirectory="PreserveNewest" />
16 <Content Include="tools\wix.harvest.targets" CopyToOutputDirectory="PreserveNewest" />
17 <Content Include="tools\WixToolset.Signing.targets" CopyToOutputDirectory="PreserveNewest" /> 16 <Content Include="tools\WixToolset.Signing.targets" CopyToOutputDirectory="PreserveNewest" />
18 <Content Include="tools\wix.props" CopyToOutputDirectory="PreserveNewest" /> 17 <Content Include="tools\wix.props" CopyToOutputDirectory="PreserveNewest" />
19 <Content Include="tools\wix.targets" CopyToOutputDirectory="PreserveNewest" /> 18 <Content Include="tools\wix.targets" CopyToOutputDirectory="PreserveNewest" />
diff --git a/src/wix/WixToolset.Sdk/tools/wix.targets b/src/wix/WixToolset.Sdk/tools/wix.targets
index 87dfab33..752753b6 100644
--- a/src/wix/WixToolset.Sdk/tools/wix.targets
+++ b/src/wix/WixToolset.Sdk/tools/wix.targets
@@ -34,7 +34,6 @@
34 </PropertyGroup> 34 </PropertyGroup>
35 35
36 <PropertyGroup> 36 <PropertyGroup>
37 <WixHarvestTargetsPath Condition=" '$(WixHarvestTargetsPath)' == '' ">$(MSBuildThisFileDirectory)wix.harvest.targets</WixHarvestTargetsPath>
38 <WixSigningTargetsPath Condition=" '$(WixSigningTargetsPath)' == '' ">$(MSBuildThisFileDirectory)WixToolset.Signing.targets</WixSigningTargetsPath> 37 <WixSigningTargetsPath Condition=" '$(WixSigningTargetsPath)' == '' ">$(MSBuildThisFileDirectory)WixToolset.Signing.targets</WixSigningTargetsPath>
39 </PropertyGroup> 38 </PropertyGroup>
40 39
@@ -966,7 +965,6 @@
966 --> 965 -->
967 </Target> 966 </Target>
968 967
969 <Import Project="$(WixHarvestTargetsPath)" Condition=" '$(WixHarvestTargetsPath)' != '' and Exists('$(WixHarvestTargetsPath)')" />
970 <Import Project="$(WixSigningTargetsPath)" /> 968 <Import Project="$(WixSigningTargetsPath)" />
971 969
972 <!-- Extension point: Define CustomAfterWixTargets to a .targets file that you want to include after this file. --> 970 <!-- Extension point: Define CustomAfterWixTargets to a .targets file that you want to include after this file. -->
diff --git a/src/wix/publish_t.proj b/src/wix/publish_t.proj
index 55b5216c..160cba83 100644
--- a/src/wix/publish_t.proj
+++ b/src/wix/publish_t.proj
@@ -3,15 +3,12 @@
3 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=netcoreapp3.1;PublishDir=$(BaseOutputPath)$(Configuration)\publish\wix\" Targets="Publish" /> 3 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=netcoreapp3.1;PublishDir=$(BaseOutputPath)$(Configuration)\publish\wix\" Targets="Publish" />
4 4
5 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\buildtasks\" Targets="Publish" /> 5 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\buildtasks\" Targets="Publish" />
6 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\heat\" Targets="Publish" />
7 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\wix\" Targets="Publish" /> 6 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\wix\" Targets="Publish" />
8 7
9 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\buildtasks\" Targets="Publish" /> 8 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\buildtasks\" Targets="Publish" />
10 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\heat\" Targets="Publish" />
11 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\wix\" Targets="Publish" /> 9 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\wix\" Targets="Publish" />
12 10
13 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\netcoreapp3.1\buildtasks\" Targets="Publish" /> 11 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\netcoreapp3.1\buildtasks\" Targets="Publish" />
14 <ProjectReference Include="heat\heat.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\netcoreapp3.1\heat\" Targets="Publish" />
15 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\netcoreapp3.1\wix\" Targets="Publish" /> 12 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=netcoreapp3.1;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\netcoreapp3.1\wix\" Targets="Publish" />
16 </ItemGroup> 13 </ItemGroup>
17</Project> 14</Project>
diff --git a/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj b/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
index 4ae0f4a8..fe8a78e9 100644
--- a/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
+++ b/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
@@ -32,7 +32,5 @@
32 <PackageReference Include="Microsoft.NET.Test.Sdk" /> 32 <PackageReference Include="Microsoft.NET.Test.Sdk" />
33 <PackageReference Include="xunit" /> 33 <PackageReference Include="xunit" />
34 <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" /> 34 <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" />
35 <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
36 <PackageReference Include="GitInfo" PrivateAssets="All" />
37 </ItemGroup> 35 </ItemGroup>
38</Project> 36</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
index f9a13312..40ebad5b 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
+++ b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
@@ -11,6 +11,9 @@ namespace WixToolsetTest.Sdk
11 11
12 public class MsbuildFixture 12 public class MsbuildFixture
13 { 13 {
14 public static readonly string WixMsbuildPath = Path.Combine(Path.GetDirectoryName(new Uri(typeof(MsbuildFixture).Assembly.CodeBase).AbsolutePath), "..", "..", "..", "publish", "WixToolset.Sdk");
15 public static readonly string WixPropsPath = Path.Combine(WixMsbuildPath, "build", "WixToolset.Sdk.props");
16
14 [Theory] 17 [Theory]
15 [InlineData(BuildSystem.DotNetCoreSdk)] 18 [InlineData(BuildSystem.DotNetCoreSdk)]
16 [InlineData(BuildSystem.MSBuild)] 19 [InlineData(BuildSystem.MSBuild)]
@@ -26,7 +29,10 @@ namespace WixToolsetTest.Sdk
26 var binFolder = Path.Combine(baseFolder, @"bin\"); 29 var binFolder = Path.Combine(baseFolder, @"bin\");
27 var projectPath = Path.Combine(baseFolder, "SimpleBundle.wixproj"); 30 var projectPath = Path.Combine(baseFolder, "SimpleBundle.wixproj");
28 31
29 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { "-p:SignOutput=true" }); 32 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
33 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
34 "-p:SignOutput=true",
35 });
30 result.AssertSuccess(); 36 result.AssertSuccess();
31 37
32 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 38 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -66,7 +72,10 @@ namespace WixToolsetTest.Sdk
66 var binFolder = Path.Combine(baseFolder, @"bin\"); 72 var binFolder = Path.Combine(baseFolder, @"bin\");
67 var projectPath = Path.Combine(baseFolder, "UncompressedBundle.wixproj"); 73 var projectPath = Path.Combine(baseFolder, "UncompressedBundle.wixproj");
68 74
69 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { "-p:SignOutput=true" }); 75 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
76 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
77 "-p:SignOutput=true"
78 });
70 result.AssertSuccess(); 79 result.AssertSuccess();
71 80
72 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 81 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -106,7 +115,9 @@ namespace WixToolsetTest.Sdk
106 var binFolder = Path.Combine(baseFolder, @"bin\"); 115 var binFolder = Path.Combine(baseFolder, @"bin\");
107 var projectPath = Path.Combine(baseFolder, "SimpleMergeModule.wixproj"); 116 var projectPath = Path.Combine(baseFolder, "SimpleMergeModule.wixproj");
108 117
109 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); 118 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
119 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
120 });
110 result.AssertSuccess(); 121 result.AssertSuccess();
111 122
112 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 123 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -142,7 +153,10 @@ namespace WixToolsetTest.Sdk
142 var binFolder = Path.Combine(baseFolder, @"bin\"); 153 var binFolder = Path.Combine(baseFolder, @"bin\");
143 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj"); 154 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
144 155
145 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { "-p:SignOutput=true" }); 156 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
157 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
158 "-p:SignOutput=true"
159 });
146 result.AssertSuccess(); 160 result.AssertSuccess();
147 161
148 var platformSwitches = result.Output.Where(line => line.Contains("-platform x86")); 162 var platformSwitches = result.Output.Where(line => line.Contains("-platform x86"));
@@ -208,7 +222,9 @@ namespace WixToolsetTest.Sdk
208 var binFolder = Path.Combine(baseFolder, @"bin\"); 222 var binFolder = Path.Combine(baseFolder, @"bin\");
209 var projectPath = Path.Combine(baseFolder, "MergeMsiPackage.wixproj"); 223 var projectPath = Path.Combine(baseFolder, "MergeMsiPackage.wixproj");
210 224
211 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); 225 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
226 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
227 });
212 result.AssertSuccess(); 228 result.AssertSuccess();
213 229
214 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 230 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -270,6 +286,7 @@ namespace WixToolsetTest.Sdk
270 286
271 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 287 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
272 { 288 {
289 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
273 wixpdbType == null ? String.Empty : $"-p:WixPdbType={wixpdbType}", 290 wixpdbType == null ? String.Empty : $"-p:WixPdbType={wixpdbType}",
274 "-p:SuppressValidation=true" 291 "-p:SuppressValidation=true"
275 }); 292 });
@@ -300,6 +317,7 @@ namespace WixToolsetTest.Sdk
300 317
301 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 318 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
302 { 319 {
320 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
303 $"-p:Platform=x64", 321 $"-p:Platform=x64",
304 }); 322 });
305 result.AssertSuccess(); 323 result.AssertSuccess();
@@ -337,6 +355,7 @@ namespace WixToolsetTest.Sdk
337 355
338 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 356 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
339 { 357 {
358 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
340 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressIces", "ICE12"), 359 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressIces", "ICE12"),
341 }, suppressValidation: false); 360 }, suppressValidation: false);
342 result.AssertSuccess(); 361 result.AssertSuccess();
@@ -360,6 +379,7 @@ namespace WixToolsetTest.Sdk
360 379
361 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 380 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
362 { 381 {
382 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
363 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressSpecificWarnings", "1118;1102"), 383 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressSpecificWarnings", "1118;1102"),
364 }); 384 });
365 result.AssertSuccess(); 385 result.AssertSuccess();
@@ -389,6 +409,7 @@ namespace WixToolsetTest.Sdk
389 409
390 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 410 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
391 { 411 {
412 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
392 "-p:OutputType=IntermediatePostLink", 413 "-p:OutputType=IntermediatePostLink",
393 }, outOfProc: outOfProc); 414 }, outOfProc: outOfProc);
394 result.AssertSuccess(); 415 result.AssertSuccess();
@@ -418,7 +439,9 @@ namespace WixToolsetTest.Sdk
418 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj"); 439 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
419 440
420 // Build 441 // Build
421 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, verbosityLevel: "diag"); 442 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] {
443 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath)
444 }, verbosityLevel: "diag");
422 result.AssertSuccess(); 445 result.AssertSuccess();
423 446
424 var buildOutput = String.Join("\r\n", result.Output); 447 var buildOutput = String.Join("\r\n", result.Output);
@@ -432,6 +455,7 @@ namespace WixToolsetTest.Sdk
432 // Clean 455 // Clean
433 result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 456 result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
434 { 457 {
458 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
435 "-t:Clean", 459 "-t:Clean",
436 }, verbosityLevel: "diag"); 460 }, verbosityLevel: "diag");
437 result.AssertSuccess(); 461 result.AssertSuccess();
@@ -477,7 +501,7 @@ namespace WixToolsetTest.Sdk
477 501
478 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 502 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
479 { 503 {
480 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixToolDir", Path.Combine(MsbuildUtilities.WixMsbuildPath, "broken", "net461")), 504 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixToolDir", Path.Combine(MsbuildFixture.WixMsbuildPath, "broken", "net461")),
481 }, outOfProc: true); 505 }, outOfProc: true);
482 Assert.Equal(1, result.ExitCode); 506 Assert.Equal(1, result.ExitCode);
483 507
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj b/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj
deleted file mode 100644
index 7d751319..00000000
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFileMultipleFilesSameFileName/HeatFileMultipleFilesSameFileName.wixproj
+++ /dev/null
@@ -1,58 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <Import Project="$(WixMSBuildProps)" />
4 <PropertyGroup>
5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
7 </PropertyGroup>
8
9 <PropertyGroup>
10 <ProjectGuid>7fb77005-c6e0-454f-8c2d-0a4a79c918ba</ProjectGuid>
11 </PropertyGroup>
12
13 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
14 <PlatformName>$(Platform)</PlatformName>
15 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
16 <DefineConstants>Debug</DefineConstants>
17 </PropertyGroup>
18 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
19 <PlatformName>$(Platform)</PlatformName>
20 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
21 </PropertyGroup>
22 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
23 <PlatformName>$(Platform)</PlatformName>
24 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
25 <DefineConstants>Debug</DefineConstants>
26 </PropertyGroup>
27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
28 <PlatformName>$(Platform)</PlatformName>
29 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
30 </PropertyGroup>
31
32 <ItemGroup>
33 <Compile Include="Package.wxs" />
34 </ItemGroup>
35
36 <ItemGroup>
37 <BindInputPaths Include="." />
38 </ItemGroup>
39
40 <PropertyGroup>
41 <HarvestFileSuppressUniqueIds>true</HarvestFileSuppressUniqueIds>
42 </PropertyGroup>
43
44 <ItemGroup>
45 <HarvestFile Include="MyProgram.txt">
46 <ComponentGroupName>TxtProductComponents</ComponentGroupName>
47 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
48 <SuppressRootDirectory>true</SuppressRootDirectory>
49 </HarvestFile>
50 <HarvestFile Include="MyProgram.json">
51 <ComponentGroupName>JsonProductComponents</ComponentGroupName>
52 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
53 <SuppressRootDirectory>true</SuppressRootDirectory>
54 </HarvestFile>
55 </ItemGroup>
56
57 <Import Project="$(WixTargetsPath)" />
58</Project> \ No newline at end of file
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/HeatFilePackage.wixproj b/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/HeatFilePackage.wixproj
deleted file mode 100644
index 3988acaf..00000000
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatFilePackage/HeatFilePackage.wixproj
+++ /dev/null
@@ -1,53 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <Import Project="$(WixMSBuildProps)" />
4 <PropertyGroup>
5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
7 </PropertyGroup>
8
9 <PropertyGroup>
10 <ProjectGuid>7fb77005-c6e0-454f-8c2d-0a4a79c918ba</ProjectGuid>
11 </PropertyGroup>
12
13 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
14 <PlatformName>$(Platform)</PlatformName>
15 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
16 <DefineConstants>Debug</DefineConstants>
17 </PropertyGroup>
18 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
19 <PlatformName>$(Platform)</PlatformName>
20 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
21 </PropertyGroup>
22 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
23 <PlatformName>$(Platform)</PlatformName>
24 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
25 <DefineConstants>Debug</DefineConstants>
26 </PropertyGroup>
27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
28 <PlatformName>$(Platform)</PlatformName>
29 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
30 </PropertyGroup>
31
32 <ItemGroup>
33 <Compile Include="Package.wxs" />
34 </ItemGroup>
35
36 <ItemGroup>
37 <BindInputPaths Include="." />
38 </ItemGroup>
39
40 <PropertyGroup>
41 <HarvestFileSuppressUniqueIds>true</HarvestFileSuppressUniqueIds>
42 </PropertyGroup>
43
44 <ItemGroup>
45 <HarvestFile Include="HeatFilePackage.wixproj">
46 <ComponentGroupName>ProductComponents</ComponentGroupName>
47 <DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
48 <SuppressRootDirectory>true</SuppressRootDirectory>
49 </HarvestFile>
50 </ItemGroup>
51
52 <Import Project="$(WixTargetsPath)" />
53</Project> \ No newline at end of file
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj b/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj
deleted file mode 100644
index c569e8ac..00000000
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <Import Project="$(WixMSBuildProps)" />
4 <PropertyGroup>
5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
7 </PropertyGroup>
8
9 <PropertyGroup>
10 <ProjectGuid>BB919765-DD69-41E7-91C5-415A69BE923E</ProjectGuid>
11 </PropertyGroup>
12
13 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
14 <PlatformName>$(Platform)</PlatformName>
15 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
16 <DefineConstants>Debug</DefineConstants>
17 </PropertyGroup>
18 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
19 <PlatformName>$(Platform)</PlatformName>
20 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
21 </PropertyGroup>
22 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
23 <PlatformName>$(Platform)</PlatformName>
24 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
25 <DefineConstants>Debug</DefineConstants>
26 </PropertyGroup>
27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
28 <PlatformName>$(Platform)</PlatformName>
29 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
30 </PropertyGroup>
31
32 <ItemGroup>
33 <Compile Include="Package.wxs" />
34 </ItemGroup>
35
36 <ItemGroup>
37 <BindInputPaths Include="." />
38 </ItemGroup>
39
40 <PropertyGroup>
41 <EnableProjectHarvesting>true</EnableProjectHarvesting>
42 <HarvestProjectsSuppressUniqueIds>true</HarvestProjectsSuppressUniqueIds>
43 </PropertyGroup>
44
45 <ItemGroup>
46 <ProjectReference Include="..\ToolsVersion4Cs\ToolsVersion4Cs.csproj" />
47 </ItemGroup>
48
49 <Import Project="$(WixTargetsPath)" />
50</Project> \ No newline at end of file
diff --git a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj b/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj
deleted file mode 100644
index 907f0bb0..00000000
--- a/src/wix/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <Import Project="$(WixMSBuildProps)" />
4 <PropertyGroup>
5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6 <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
7 </PropertyGroup>
8
9 <PropertyGroup>
10 <ProjectGuid>CE998A54-9BEC-4268-BFA2-8E3DAE5831C8</ProjectGuid>
11 </PropertyGroup>
12
13 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
14 <PlatformName>$(Platform)</PlatformName>
15 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
16 <DefineConstants>Debug</DefineConstants>
17 </PropertyGroup>
18 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
19 <PlatformName>$(Platform)</PlatformName>
20 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
21 </PropertyGroup>
22 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
23 <PlatformName>$(Platform)</PlatformName>
24 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
25 <DefineConstants>Debug</DefineConstants>
26 </PropertyGroup>
27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
28 <PlatformName>$(Platform)</PlatformName>
29 <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
30 </PropertyGroup>
31
32 <ItemGroup>
33 <Compile Include="Package.wxs" />
34 </ItemGroup>
35
36 <ItemGroup>
37 <BindInputPaths Include="." />
38 </ItemGroup>
39
40 <PropertyGroup>
41 <EnableProjectHarvesting>true</EnableProjectHarvesting>
42 <HarvestProjectsSuppressUniqueIds>true</HarvestProjectsSuppressUniqueIds>
43 </PropertyGroup>
44
45 <ItemGroup>
46 <ProjectReference Include="..\SdkStyleCs\SdkStyleCs.csproj" />
47 </ItemGroup>
48
49 <Import Project="$(WixTargetsPath)" />
50</Project> \ No newline at end of file
diff --git a/src/wix/wix.cmd b/src/wix/wix.cmd
index 281f7f68..17c1ab6f 100644
--- a/src/wix/wix.cmd
+++ b/src/wix/wix.cmd
@@ -30,22 +30,18 @@ dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Core -l "trx;LogFile
30dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Core.Burn -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Core.Burn.trx" || exit /b 30dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Core.Burn -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Core.Burn.trx" || exit /b
31dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Core.Native -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Core.Native.trx" || exit /b 31dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Core.Native -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Core.Native.trx" || exit /b
32dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.CoreIntegration -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.CoreIntegration.trx" || exit /b 32dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.CoreIntegration -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.CoreIntegration.trx" || exit /b
33dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Heat -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Heat.trx" || exit /b
34 33
35 34
36:: Publish 35:: Publish
37msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b 36msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b
38 37
39robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\buildtasks %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% /XF Microsoft.Build.*.dll 38robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\buildtasks %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% /XF Microsoft.Build.*.dll
40robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\heat %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO%
41robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\wix %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% 39robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\wix %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO%
42 40
43robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\buildtasks %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% /XF Microsoft.Build.*.dll 41robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\buildtasks %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% /XF Microsoft.Build.*.dll
44robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\heat %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO%
45robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\wix %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% 42robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\wix %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO%
46 43
47robocopy %_P_OBJ%\WixToolset.Sdk\separate\netcoreapp3.1\buildtasks %_P%\WixToolset.Sdk\tools\netcoreapp3.1 %_RCO% /XF Microsoft.Build.*.dll 44robocopy %_P_OBJ%\WixToolset.Sdk\separate\netcoreapp3.1\buildtasks %_P%\WixToolset.Sdk\tools\netcoreapp3.1 %_RCO% /XF Microsoft.Build.*.dll
48robocopy %_P_OBJ%\WixToolset.Sdk\separate\netcoreapp3.1\heat %_P%\WixToolset.Sdk\tools\netcoreapp3.1 %_RCO%
49robocopy %_P_OBJ%\WixToolset.Sdk\separate\netcoreapp3.1\wix %_P%\WixToolset.Sdk\tools\netcoreapp3.1 %_RCO% 45robocopy %_P_OBJ%\WixToolset.Sdk\separate\netcoreapp3.1\wix %_P%\WixToolset.Sdk\tools\netcoreapp3.1 %_RCO%
50 46
51msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\WixToolset.Sdk.csproj -bl:%_L%\wix_sdk_publish.binlog || exit /b 47msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\WixToolset.Sdk.csproj -bl:%_L%\wix_sdk_publish.binlog || exit /b
@@ -59,7 +55,7 @@ dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.BuildTasks -l "trx;L
59dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Sdk -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Sdk.trx" || exit /b 55dotnet test -c %_C% --no-build --nologo test\WixToolsetTest.Sdk -l "trx;LogFileName=%_L%\TestResults\WixToolsetTest.Sdk.trx" || exit /b
60 56
61:: Pack 57:: Pack
62msbuild pack_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:..\..\build\logs\wix_pack.binlog || exit /b 58msbuild pack_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_pack.binlog || exit /b
63 59
64@popd 60@popd
65@endlocal 61@endlocal
diff --git a/src/wix/wix.sln b/src/wix/wix.sln
index 81faf8be..13ca8785 100644
--- a/src/wix/wix.sln
+++ b/src/wix/wix.sln
@@ -34,8 +34,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wixnative", "wixnative\wixn
34EndProject 34EndProject
35Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Core.Native", "WixToolset.Core.Native\WixToolset.Core.Native.csproj", "{81533C6A-E145-4EB5-9658-3ACA8A2A6323}" 35Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Core.Native", "WixToolset.Core.Native\WixToolset.Core.Native.csproj", "{81533C6A-E145-4EB5-9658-3ACA8A2A6323}"
36EndProject 36EndProject
37Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "heat", "heat\heat.csproj", "{E08BCE70-7D77-4B70-83F1-F08A7B58FC16}"
38EndProject
39Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "wix", "wix\wix.csproj", "{C933FB6B-074C-4ED2-B961-7639A7877B3A}" 37Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "wix", "wix\wix.csproj", "{C933FB6B-074C-4ED2-B961-7639A7877B3A}"
40EndProject 38EndProject
41Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.BuildTasks", "WixToolset.BuildTasks\WixToolset.BuildTasks.csproj", "{D04EE8DF-85E5-42E5-B7B4-D064818F32C5}" 39Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.BuildTasks", "WixToolset.BuildTasks\WixToolset.BuildTasks.csproj", "{D04EE8DF-85E5-42E5-B7B4-D064818F32C5}"
@@ -44,8 +42,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Sdk", "WixToolse
44EndProject 42EndProject
45Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Sdk", "test\WixToolsetTest.Sdk\WixToolsetTest.Sdk.csproj", "{C44BB95F-5020-4876-933C-B73A24C488FD}" 43Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Sdk", "test\WixToolsetTest.Sdk\WixToolsetTest.Sdk.csproj", "{C44BB95F-5020-4876-933C-B73A24C488FD}"
46EndProject 44EndProject
47Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Heat", "test\WixToolsetTest.Heat\WixToolsetTest.Heat.csproj", "{9D788104-2636-4E4C-891C-08FF05FEC31E}"
48EndProject
49Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Core.Native", "test\WixToolsetTest.Core.Native\WixToolsetTest.Core.Native.csproj", "{93645356-5D5F-45DE-AC7F-252D35E1ACE5}" 45Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Core.Native", "test\WixToolsetTest.Core.Native\WixToolsetTest.Core.Native.csproj", "{93645356-5D5F-45DE-AC7F-252D35E1ACE5}"
50EndProject 46EndProject
51Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.BuildTasks", "test\WixToolsetTest.BuildTasks\WixToolsetTest.BuildTasks.csproj", "{A05698E0-30D9-4B36-8F3B-585A99D67118}" 47Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.BuildTasks", "test\WixToolsetTest.BuildTasks\WixToolsetTest.BuildTasks.csproj", "{A05698E0-30D9-4B36-8F3B-585A99D67118}"
@@ -306,22 +302,6 @@ Global
306 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x64.Build.0 = Release|Any CPU 302 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x64.Build.0 = Release|Any CPU
307 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x86.ActiveCfg = Release|Any CPU 303 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x86.ActiveCfg = Release|Any CPU
308 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x86.Build.0 = Release|Any CPU 304 {81533C6A-E145-4EB5-9658-3ACA8A2A6323}.Release|x86.Build.0 = Release|Any CPU
309 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
310 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|Any CPU.Build.0 = Debug|Any CPU
311 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|ARM64.ActiveCfg = Debug|Any CPU
312 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|ARM64.Build.0 = Debug|Any CPU
313 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|x64.ActiveCfg = Debug|Any CPU
314 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|x64.Build.0 = Debug|Any CPU
315 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|x86.ActiveCfg = Debug|Any CPU
316 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Debug|x86.Build.0 = Debug|Any CPU
317 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|Any CPU.ActiveCfg = Release|Any CPU
318 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|Any CPU.Build.0 = Release|Any CPU
319 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|ARM64.ActiveCfg = Release|Any CPU
320 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|ARM64.Build.0 = Release|Any CPU
321 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|x64.ActiveCfg = Release|Any CPU
322 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|x64.Build.0 = Release|Any CPU
323 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|x86.ActiveCfg = Release|Any CPU
324 {E08BCE70-7D77-4B70-83F1-F08A7B58FC16}.Release|x86.Build.0 = Release|Any CPU
325 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 305 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
326 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|Any CPU.Build.0 = Debug|Any CPU 306 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
327 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|ARM64.ActiveCfg = Debug|Any CPU 307 {C933FB6B-074C-4ED2-B961-7639A7877B3A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
@@ -386,22 +366,6 @@ Global
386 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x64.Build.0 = Release|Any CPU 366 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x64.Build.0 = Release|Any CPU
387 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x86.ActiveCfg = Release|Any CPU 367 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x86.ActiveCfg = Release|Any CPU
388 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x86.Build.0 = Release|Any CPU 368 {C44BB95F-5020-4876-933C-B73A24C488FD}.Release|x86.Build.0 = Release|Any CPU
389 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
390 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|Any CPU.Build.0 = Debug|Any CPU
391 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
392 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|ARM64.Build.0 = Debug|Any CPU
393 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|x64.ActiveCfg = Debug|Any CPU
394 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|x64.Build.0 = Debug|Any CPU
395 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|x86.ActiveCfg = Debug|Any CPU
396 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Debug|x86.Build.0 = Debug|Any CPU
397 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|Any CPU.ActiveCfg = Release|Any CPU
398 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|Any CPU.Build.0 = Release|Any CPU
399 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|ARM64.ActiveCfg = Release|Any CPU
400 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|ARM64.Build.0 = Release|Any CPU
401 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|x64.ActiveCfg = Release|Any CPU
402 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|x64.Build.0 = Release|Any CPU
403 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|x86.ActiveCfg = Release|Any CPU
404 {9D788104-2636-4E4C-891C-08FF05FEC31E}.Release|x86.Build.0 = Release|Any CPU
405 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 369 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
406 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|Any CPU.Build.0 = Debug|Any CPU 370 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
407 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|ARM64.ActiveCfg = Debug|Any CPU 371 {93645356-5D5F-45DE-AC7F-252D35E1ACE5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
@@ -478,7 +442,6 @@ Global
478 {DF63F589-028E-45A1-A212-948FACF1FDCD} = {1284331E-BC6C-426D-AAAF-140C0174F875} 442 {DF63F589-028E-45A1-A212-948FACF1FDCD} = {1284331E-BC6C-426D-AAAF-140C0174F875}
479 {23FC60D7-B101-42F8-9786-DB7A9CD964A2} = {1284331E-BC6C-426D-AAAF-140C0174F875} 443 {23FC60D7-B101-42F8-9786-DB7A9CD964A2} = {1284331E-BC6C-426D-AAAF-140C0174F875}
480 {C44BB95F-5020-4876-933C-B73A24C488FD} = {1284331E-BC6C-426D-AAAF-140C0174F875} 444 {C44BB95F-5020-4876-933C-B73A24C488FD} = {1284331E-BC6C-426D-AAAF-140C0174F875}
481 {9D788104-2636-4E4C-891C-08FF05FEC31E} = {1284331E-BC6C-426D-AAAF-140C0174F875}
482 {93645356-5D5F-45DE-AC7F-252D35E1ACE5} = {1284331E-BC6C-426D-AAAF-140C0174F875} 445 {93645356-5D5F-45DE-AC7F-252D35E1ACE5} = {1284331E-BC6C-426D-AAAF-140C0174F875}
483 {A05698E0-30D9-4B36-8F3B-585A99D67118} = {1284331E-BC6C-426D-AAAF-140C0174F875} 446 {A05698E0-30D9-4B36-8F3B-585A99D67118} = {1284331E-BC6C-426D-AAAF-140C0174F875}
484 {392817AE-4493-4BED-A7FD-2399379E1B1C} = {1284331E-BC6C-426D-AAAF-140C0174F875} 447 {392817AE-4493-4BED-A7FD-2399379E1B1C} = {1284331E-BC6C-426D-AAAF-140C0174F875}