From b0cb6432808a687bf18b19e0018bb4287093d02b Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 7 Nov 2020 11:30:25 -0600 Subject: WIXFEAT:5490 - Send MSBuild bin path to heat project harvesting. --- src/WixToolset.BuildTasks/HeatProject.cs | 9 + src/WixToolset.Sdk/tools/wix.harvest.targets | 3 + src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs | 225 +++++++++++++++++++++ .../HeatProjectPreSdkStyle.wixproj | 50 +++++ .../HeatProject/HeatProjectPreSdkStyle/Package.wxs | 19 ++ .../HeatProjectSdkStyle.wixproj | 50 +++++ .../HeatProject/HeatProjectSdkStyle/Package.wxs | 19 ++ .../TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs | 8 + .../HeatProject/SdkStyleCs/SdkStyleCs.csproj | 8 + .../ToolsVersion4Cs/Properties/AssemblyInfo.cs | 11 + .../ToolsVersion4Cs/ToolsVersion4Cs.csproj | 36 ++++ .../WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj | 9 + 12 files changed, 447 insertions(+) create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs create mode 100644 src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj (limited to 'src') diff --git a/src/WixToolset.BuildTasks/HeatProject.cs b/src/WixToolset.BuildTasks/HeatProject.cs index 71679dc4..3833a754 100644 --- a/src/WixToolset.BuildTasks/HeatProject.cs +++ b/src/WixToolset.BuildTasks/HeatProject.cs @@ -39,6 +39,8 @@ namespace WixToolset.BuildTasks set { this.generateType = value; } } + public string MsbuildBinPath { get; set; } + public string Platform { get { return this.platform; } @@ -77,6 +79,8 @@ namespace WixToolset.BuildTasks } } + public bool UseToolsVersion { get; set; } + protected override string OperationName { get { return "project"; } @@ -90,11 +94,16 @@ namespace WixToolset.BuildTasks commandLineBuilder.AppendSwitchIfNotNull("-configuration ", this.Configuration); commandLineBuilder.AppendSwitchIfNotNull("-directoryid ", this.DirectoryIds); commandLineBuilder.AppendSwitchIfNotNull("-generate ", this.GenerateType); + commandLineBuilder.AppendSwitchIfNotNull("-msbuildbinpath ", this.MsbuildBinPath); commandLineBuilder.AppendSwitchIfNotNull("-platform ", this.Platform); commandLineBuilder.AppendArrayIfNotNull("-pog ", this.ProjectOutputGroups); commandLineBuilder.AppendSwitchIfNotNull("-projectname ", this.ProjectName); commandLineBuilder.AppendIfTrue("-wixvar", this.GenerateWixVariables); +#if !NETCOREAPP + commandLineBuilder.AppendIfTrue("-usetoolsversion", this.UseToolsVersion); +#endif + base.BuildCommandLine(commandLineBuilder); } } diff --git a/src/WixToolset.Sdk/tools/wix.harvest.targets b/src/WixToolset.Sdk/tools/wix.harvest.targets index dea44469..f3ec760b 100644 --- a/src/WixToolset.Sdk/tools/wix.harvest.targets +++ b/src/WixToolset.Sdk/tools/wix.harvest.targets @@ -48,6 +48,7 @@ $(HarvestTransforms) $(IntermediateOutputPath)Product.Generated.wxs $(IntermediateOutputPath)Bundle.Generated.wxs + $(MSBuildBinPath) @@ -273,11 +274,13 @@ Project="%(_AllHeatProjects.FullPath)" ProjectOutputGroups="%(_AllHeatProjects.ProjectOutputGroups)" GenerateType="%(_AllHeatProjects.GenerateType)" + MsbuildBinPath="$(HarvestProjectsMsbuildBinPath)" DirectoryIds="%(_AllHeatProjects.DirectoryIds)" ProjectName="%(_AllHeatProjects.ProjectName)" Configuration="%(_AllHeatProjects.Configuration)" Platform="%(_AllHeatProjects.Platform)" GenerateWixVariables="$(HarvestProjectsGenerateWixVariables)" + UseToolsVersion="$(HarvestProjectsUseToolsVersion)" AdditionalOptions="$(HarvestProjectsAdditionalOptions)" RunAsSeparateProcess="$(RunWixToolsOutOfProc)" ToolExe="$(HeatToolExe)" diff --git a/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs b/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs index 2f32a30f..10840c56 100644 --- a/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs +++ b/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs @@ -146,5 +146,230 @@ namespace WixToolsetTest.Sdk Assert.Equal(@"SourceDir\MyProgram.json", fileSymbols[1][FileSymbolFields.Source].PreviousValue.AsPath().Path); } } + + [Theory] + [InlineData(BuildSystem.DotNetCoreSdk, true)] + [InlineData(BuildSystem.DotNetCoreSdk, false)] + [InlineData(BuildSystem.MSBuild, true)] + [InlineData(BuildSystem.MSBuild, false)] + [InlineData(BuildSystem.MSBuild64, true)] + [InlineData(BuildSystem.MSBuild64, false)] + public void CanBuildHeatProjectPreSdkStyle(BuildSystem buildSystem, bool useToolsVersion) + { + var sourceFolder = TestData.Get(@"TestData\HeatProject"); + + using (var fs = new TestDataFolderFileSystem()) + { + fs.Initialize(sourceFolder); + var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectPreSdkStyle"); + var binFolder = Path.Combine(baseFolder, @"bin\"); + var intermediateFolder = Path.Combine(baseFolder, @"obj\"); + var projectPath = Path.Combine(baseFolder, "HeatProjectPreSdkStyle.wixproj"); + + var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] + { + useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty, + }); + result.AssertSuccess(); + + var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); + var heatCommandLine = Assert.Single(heatCommandLines); + + if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk) + { + Assert.Contains("-usetoolsversion", heatCommandLine); + } + else + { + Assert.DoesNotContain("-usetoolsversion", heatCommandLine); + } + + var warnings = result.Output.Where(line => line.Contains(": warning")); + Assert.Empty(warnings); + + var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_ToolsVersion4Cs.wxs"); + Assert.True(File.Exists(generatedFilePath)); + + var generatedContents = File.ReadAllText(generatedFilePath); + var testXml = generatedContents.GetTestXml(); + Assert.Equal(@"" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "", testXml); + + var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatProjectPreSdkStyle.wixpdb"); + Assert.True(File.Exists(pdbPath)); + + var intermediate = Intermediate.Load(pdbPath); + var section = intermediate.Sections.Single(); + + var fileSymbol = section.Symbols.OfType().Single(); + Assert.Equal(Path.Combine(fs.BaseFolder, "ToolsVersion4Cs", "bin", "Release\\\\ToolsVersion4Cs.dll"), fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path); + } + } + + [Theory] + [InlineData(BuildSystem.DotNetCoreSdk, true)] + [InlineData(BuildSystem.DotNetCoreSdk, false)] + [InlineData(BuildSystem.MSBuild, true)] + [InlineData(BuildSystem.MSBuild, false)] + [InlineData(BuildSystem.MSBuild64, true)] + [InlineData(BuildSystem.MSBuild64, false)] + public void CanBuildHeatProjectSdkStyle(BuildSystem buildSystem, bool useToolsVersion) + { + var sourceFolder = TestData.Get(@"TestData\HeatProject"); + + using (var fs = new TestDataFolderFileSystem()) + { + fs.Initialize(sourceFolder); + var baseFolder = Path.Combine(fs.BaseFolder, "HeatProjectSdkStyle"); + var binFolder = Path.Combine(baseFolder, @"bin\"); + var intermediateFolder = Path.Combine(baseFolder, @"obj\"); + var projectPath = Path.Combine(baseFolder, "HeatProjectSdkStyle.wixproj"); + var referencedProjectPath = Path.Combine(fs.BaseFolder, "SdkStyleCs", "SdkStyleCs.csproj"); + + var result = MsbuildUtilities.BuildProject(buildSystem, referencedProjectPath, new[] + { + "-t:restore", + }); + result.AssertSuccess(); + + result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] + { + useToolsVersion ? $"-p:HarvestProjectsUseToolsVersion=true" : String.Empty, + }); + result.AssertSuccess(); + + var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); + var heatCommandLine = Assert.Single(heatCommandLines); + + if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk) + { + Assert.Contains("-usetoolsversion", heatCommandLine); + } + else + { + Assert.DoesNotContain("-usetoolsversion", heatCommandLine); + } + + var warnings = result.Output.Where(line => line.Contains(": warning")); + Assert.Empty(warnings); + + var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_SdkStyleCs.wxs"); + Assert.True(File.Exists(generatedFilePath)); + + var generatedContents = File.ReadAllText(generatedFilePath); + var testXml = generatedContents.GetTestXml(); + Assert.Equal(@"" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "", testXml); + + var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatProjectSdkStyle.wixpdb"); + Assert.True(File.Exists(pdbPath)); + + var intermediate = Intermediate.Load(pdbPath); + var section = intermediate.Sections.Single(); + + var fileSymbol = section.Symbols.OfType().Single(); + Assert.Equal(Path.Combine(fs.BaseFolder, "SdkStyleCs", "bin", "Release", "netstandard2.0\\\\SdkStyleCs.dll"), fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path); + } + } } } diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj new file mode 100644 index 00000000..c569e8ac --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/HeatProjectPreSdkStyle.wixproj @@ -0,0 +1,50 @@ + + + + + Debug + x86 + + + + BB919765-DD69-41E7-91C5-415A69BE923E + + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + Debug + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + Debug + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + + + + + + + + + + + + true + true + + + + + + + + \ No newline at end of file diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs new file mode 100644 index 00000000..b2988760 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectPreSdkStyle/Package.wxs @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj new file mode 100644 index 00000000..907f0bb0 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/HeatProjectSdkStyle.wixproj @@ -0,0 +1,50 @@ + + + + + Debug + x86 + + + + CE998A54-9BEC-4268-BFA2-8E3DAE5831C8 + + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + Debug + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + Debug + + + $(Platform) + bin\$(Platform)\$(Configuration)\ + + + + + + + + + + + + true + true + + + + + + + + \ No newline at end of file diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs new file mode 100644 index 00000000..fc6e9d29 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/HeatProjectSdkStyle/Package.wxs @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs new file mode 100644 index 00000000..2b2c5be2 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.cs @@ -0,0 +1,8 @@ +// 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. + +namespace SdkStyleCs +{ + public class SdkStyleCs + { + } +} diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj new file mode 100644 index 00000000..755976bc --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/SdkStyleCs/SdkStyleCs.csproj @@ -0,0 +1,8 @@ + + + + + + netstandard2.0 + + diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c29a2303 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/Properties/AssemblyInfo.cs @@ -0,0 +1,11 @@ +// 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. + +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("ToolsVersion4Cs")] +[assembly: AssemblyDescription("ToolsVersion4Cs")] +[assembly: AssemblyProduct("WiX Toolset")] +[assembly: AssemblyCompany("WiX Toolset Team")] +[assembly: AssemblyCopyright("Copyright (c) .NET Foundation and contributors. All rights reserved.")] diff --git a/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj new file mode 100644 index 00000000..9c55f7a5 --- /dev/null +++ b/src/test/WixToolsetTest.Sdk/TestData/HeatProject/ToolsVersion4Cs/ToolsVersion4Cs.csproj @@ -0,0 +1,36 @@ + + + + + + + {8B19578A-816A-48A1-A6C4-58067334EB79} + ToolsVersion4Cs + Library + ToolsVersion4Cs + v4.0 + + + true + false + $(DefineConstants);DEBUG;TRACE + bin\Debug\ + + + true + true + $(DefineConstants);TRACE + bin\Release\ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj b/src/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj index 916300af..45c38996 100644 --- a/src/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj +++ b/src/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj @@ -6,6 +6,7 @@ net461 false embedded + TestData\**;$(DefaultItemExcludes) @@ -15,6 +16,14 @@ + + + + + + + + -- cgit v1.2.3-55-g6feb