public void CanBuildSimpleMsiPackageAsWixipl() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", "-p:OutputType=IntermediatePostLink" }); result.AssertSuccess(); var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .Single(); Assert.Equal(@"bin\MsiPackage.wixipl", path); } }
public void CanBuildSimpleBundle() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\SimpleBundle\SimpleBundle.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}" }); result.AssertSuccess(); var platformSwitches = result.Output.Where(line => line.TrimStart().StartsWith("wix.exe build -platform x86")); Assert.Single(platformSwitches); var warnings = result.Output.Where(line => line.Contains(": warning")); Assert.Empty(warnings); var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .OrderBy(s => s) .ToArray(); Assert.Equal(new[] { @"bin\SimpleBundle.exe", @"bin\SimpleBundle.wixpdb", }, paths); } }
private void AssertWixpdb(string wixpdbType, string[] expectedOutputFiles) { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { wixpdbType == null ? String.Empty : $"-p:WixPdbType={wixpdbType}", $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", }); result.AssertSuccess(); var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .OrderBy(s => s) .ToArray(); Assert.Equal(expectedOutputFiles, paths); } }
public void CanBuildHeatFilePackage() { var projectPath = TestData.Get(@"TestData\HeatFilePackage\HeatFilePackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}" }); result.AssertSuccess(); var heatCommandLines = result.Output.Where(line => line.TrimStart().StartsWith("heat.exe file")); Assert.Single(heatCommandLines); var warnings = result.Output.Where(line => line.Contains(": warning")); Assert.Empty(warnings); var generatedFilePath = Path.Combine(intermediateFolder, @"_HeatFilePackage_file.wxs"); Assert.True(File.Exists(generatedFilePath)); var generatedContents = File.ReadAllText(generatedFilePath); var testXml = generatedContents.GetTestXml(); Assert.Equal(@"<Wix>" + "<Fragment>" + "<DirectoryRef Id='INSTALLFOLDER'>" + "<Component Id='HeatFilePackage.wixproj' Guid='*'>" + "<File Id='HeatFilePackage.wixproj' KeyPath='yes' Source='SourceDir\\HeatFilePackage.wixproj' />" + "</Component>" + "</DirectoryRef>" + "</Fragment>" + "<Fragment>" + "<ComponentGroup Id='ProductComponents'>" + "<ComponentRef Id='HeatFilePackage.wixproj' />" + "</ComponentGroup>" + "</Fragment>" + "</Wix>", testXml); var pdbPath = Path.Combine(binFolder, "HeatFilePackage.wixpdb"); Assert.True(File.Exists(pdbPath)); var intermediate = Intermediate.Load(pdbPath); var section = intermediate.Sections.Single(); var fileTuple = section.Tuples.OfType <FileTuple>().Single(); Assert.Equal(@"SourceDir\HeatFilePackage.wixproj", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); } }
public void CanBuildAndCleanSimpleMsiPackage() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); // Build var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", "-v:diag" }); result.AssertSuccess(); var buildOutput = String.Join("\r\n", result.Output); var createdPaths = Directory.EnumerateFiles(baseFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .OrderBy(s => s) .ToArray(); Assert.NotEmpty(createdPaths); // Clean result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", "-t:Clean", "-v:diag" }); result.AssertSuccess(); var cleanOutput = String.Join("\r\n", result.Output); // Clean is only expected to delete the files listed in {Project}.FileListAbsolute.txt, // so this is not quite right but close enough. var remainingPaths = Directory.EnumerateFiles(baseFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .Where(s => s != "obj\\MsiPackage.wixproj.FileListAbsolute.txt") .OrderBy(s => s) .ToArray(); Assert.Empty(remainingPaths); } }
public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool?outOfProc = null, string verbosityLevel = "normal") { var allArgs = new List <string> { $"-verbosity:{verbosityLevel}", $"-p:Configuration={configuration}", GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildUtilities.WixPropsPath), // Node reuse means that child msbuild processes can stay around after the build completes. // Under that scenario, the root msbuild does not reliably close its streams which causes us to hang. "-nr:false", }; if (outOfProc.HasValue) { allArgs.Add($"-p:RunWixToolsOutOfProc={outOfProc.Value}"); } if (arguments != null) { allArgs.AddRange(arguments); } switch (buildSystem) { case BuildSystem.DotNetCoreSdk: { allArgs.Add(projectPath); var result = DotnetRunner.Execute("msbuild", allArgs.ToArray()); return(new MsbuildRunnerResult { ExitCode = result.ExitCode, Output = result.StandardOutput, }); } case BuildSystem.MSBuild: case BuildSystem.MSBuild64: { return(MsbuildRunner.Execute(projectPath, allArgs.ToArray(), buildSystem == BuildSystem.MSBuild64)); } default: { throw new NotImplementedException(); } } }
public void CanBuildSimpleMsiPackageWithIceSuppressions() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", "-p:SuppressIces=\"ICE45;ICE46\"" }); result.AssertSuccess(); } }
public void CanBuildSimpleMsiPackageWithWarningSuppressions() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", "-p:SuppressSpecificWarnings=\"1118;1102\"" }); result.AssertSuccess(); var warnings = result.Output.Where(line => line.Contains(": warning")); Assert.Empty(warnings); } }
public void CanBuild64BitMsiPackage() { var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var binFolder = Path.Combine(baseFolder, @"bin\"); var intermediateFolder = Path.Combine(baseFolder, @"obj\"); var result = MsbuildRunner.Execute(projectPath, new[] { $"-p:WixTargetsPath={WixTargetsPath}", $"-p:IntermediateOutputPath={intermediateFolder}", $"-p:OutputPath={binFolder}", $"-p:InstallerPlatform=x64", }); result.AssertSuccess(); var platformSwitches = result.Output.Where(line => line.TrimStart().StartsWith("wix.exe build -platform x64")); Assert.Single(platformSwitches); } }