Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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();
            }
            }
        }
Ejemplo n.º 7
0
        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();
            }
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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);
            }
        }