public void AddProject(ProjectReference project) { var sourceDir = project.SourceDir ?? _sourceDir; var targetDir = project.TargetDir ?? _targetDir; if (!System.IO.File.Exists(project.ProjectPath)) { throw new Exception($"Project '{project.ProjectPath}' not found."); } var output = Path.Combine(_project.OutDir, Path.ChangeExtension(Path.GetFileName(project.ProjectPath), "wxs")); var projectDir = Path.GetDirectoryName(project.ProjectPath); var args = new[] { $"project {project.ProjectPath}", project.Binaries ? "-pog Binaries" : "", project.Content ? "-pog Content" : "", project.Satellites ? "-pog Satellites" : "", "-ag", "-sfrag", $"-directoryid {targetDir}", "-template fragment", $"-platform AnyCPU", $"-projectname {project.Name}", $"-out {output}" }; var pi = new ProcessStartInfo { FileName = _heat, Arguments = string.Join(" ", args), CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true }; using (var p = Process.Start(pi)) { p.WaitForExit(); if (p.ExitCode != 0) { throw new Exception(p.StandardOutput.ReadToEnd()); } } var xml = XDocument.Load(output); foreach (var fragment in xml.Root.Elements()) { _project.AddXml("Wix", fragment.ToString()); } _project.CandleOptions += $" -d\"{project.Name}.TargetDir\"={sourceDir} " + //As intended the TargetDir for candle is the sourceDir $" -d\"{project.Name}.ProjectDir\"={projectDir} "; _components.Add(project); if (!Compiler.PreserveTempFiles) { System.IO.File.Delete(output); } }