aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-07-26 17:20:39 -0700
committerRob Mensching <rob@firegiant.com>2022-08-01 20:25:19 -0700
commita627ca9b720047e633a8fe72003ab9bee31006c5 (patch)
tree2bc8a924bb4141ab718e74d08f6459a0ffe8d573 /src
parent521eb3c9cf38823a2c4019abb85dc0b3200b92cb (diff)
downloadwix-a627ca9b720047e633a8fe72003ab9bee31006c5.tar.gz
wix-a627ca9b720047e633a8fe72003ab9bee31006c5.tar.bz2
wix-a627ca9b720047e633a8fe72003ab9bee31006c5.zip
Create WixToolset.Heat.nupkg to distribute heat.exe and Heat targets
Moves Heat functionality to the "tools" layer and packages it all up in WixToolset.Heat.nupkg for distribution in WiX v4. Completes 6838
Diffstat (limited to '')
-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}