/// <summary> /// Copy-Constructor to easily produce derived configurations. /// </summary> /// <param name="s"></param> public AnyBuildSettings(AnyBuildSettings s) : this() { if (s != null) { foreach (var p in s.Properties) { var value = p.Value.ToArray(); WithProperty(p.Key, value); } Targets.AddRange(s.Targets); PlatformTarget = s.PlatformTarget; Configuration = s.Configuration; Verbosity = s.Verbosity; NoConsoleLogger = s.NoConsoleLogger; MSBuildPlatform = s.MSBuildPlatform; MaxCpuCount = s.MaxCpuCount; ToolPath = s.ToolPath; ToolTimeout = s.ToolTimeout; WorkingDirectory = s.WorkingDirectory; ArgumentCustomization = s.ArgumentCustomization; if (s.EnvironmentVariables != null) { EnvironmentVariables = new Dictionary <string, string>(s.EnvironmentVariables); } } }
/// <summary> /// Compiles the projects and then copies the output into a well-defined and well-known directory structure. /// This shields against weird projects that try to be smart with their "outputDir" property. /// </summary> /// <param name="settings"></param> public static void CompileProject(AnyBuildSettings settings) { var effectiveBuildConfig = BuildConfig.Config; if (effectiveBuildConfig.Solution != null) { foreach (var projectWithPlatform in effectiveBuildConfig.ProjectsByPlatform) { InvokeXBuild(effectiveBuildConfig.Solution, settings, projectWithPlatform.Key); foreach (var p in projectWithPlatform.Value) { SalvageBuildResults(p); PublishActions.ProduceNuGetPackage(p); } } } else { foreach (var projectWithPlatform in effectiveBuildConfig.ProjectsByPlatform) { foreach (var p in projectWithPlatform.Value) { InvokeXBuild(p.ProjectFile, settings, projectWithPlatform.Key); SalvageBuildResults(p); PublishActions.ProduceNuGetPackage(p); } } } }
public static MSBuildSettings CreateMSBuildSettings(AnyBuildSettings settings, string target = null) { if (settings == null) { return(new MSBuildSettings()); } var s = new MSBuildSettings(); ApplyToolSettings(s, settings); s.ArgumentCustomization = settings.ArgumentCustomization; s.Configuration = settings.Configuration ?? BuildConfig.Configuration; s.Verbosity = settings.Verbosity; if (target != null) { s.Targets.Add(target); } foreach (var e in settings.Properties) { s.Properties[e.Key] = new List <string>(e.Value); } s.NoConsoleLogger = settings.NoConsoleLogger; s.PlatformTarget = settings.PlatformTarget; // MSBuild specific settings s.MSBuildPlatform = settings.MSBuildPlatform; s.MaxCpuCount = settings.MaxCpuCount; return(s); }
static MSBuildSettings CreatePreProcessingMSBuildSettings(PlatformTarget target, FilePath targetFile) { var settings = new AnyBuildSettings(BuildConfig.BuildSettings); settings.PlatformTarget = target; var buildSettings = XBuildHelper.CreateMSBuildSettings(settings); var argsCustomizer = buildSettings.ArgumentCustomization; buildSettings.ArgumentCustomization = args => { if (argsCustomizer != null) { args = argsCustomizer.Invoke(args); } args.AppendQuoted("/preprocess:" + targetFile.FullPath); return(args); }; return(buildSettings); }
public static XBuildSettings CreateXBuildSettings(AnyBuildSettings settings, FilePath targetFile, string target) { if (settings == null) { return(new XBuildSettings()); } var s = new XBuildSettings(); ApplyToolSettings(s, settings); s.Configuration = settings.Configuration ?? BuildConfig.Configuration; s.Verbosity = settings.Verbosity; s.Targets.Add(target); foreach (var e in settings.Properties) { s.Properties[e.Key] = new List <string>(e.Value); } // Hack in support for supressing console outputs. The command line option is there, // so it would be a shame not to actually use it. s.ArgumentCustomization = x => { if (settings.ArgumentCustomization != null) { x = settings.ArgumentCustomization(x); } if (settings.NoConsoleLogger) { x.Prepend("/noconsolelogger"); } return(x); }; if (settings.PlatformTarget.HasValue) { var platform = settings.PlatformTarget.Value; var isSolution = string.Equals(targetFile.GetExtension(), ".sln", StringComparison.OrdinalIgnoreCase); s.WithProperty("Platform", GetPlatformName(platform, isSolution)); } return(s); }
public static void InvokeXBuild(FilePath path, AnyBuildSettings settings, PlatformTarget platformTarget) { settings = new AnyBuildSettings(settings); settings.PlatformTarget = platformTarget; if (settings == null) { throw new ArgumentNullException("settings"); } var targets = new List <string>(); targets.AddRange(settings.Targets); if (targets.Count == 0) { targets.Add("Build"); } var relativeProjectFile = Context.Environment.WorkingDirectory.GetRelativePath(path); Context.Log.Verbose(string.Format("Starting build for {0} with platform {1}", relativeProjectFile, platformTarget)); foreach (var target in targets) { if (Context.Environment.Platform.Family == PlatformFamily.Windows && !BuildConfig.UseXBuildOnWindows) { Context.MSBuild(path, XBuildHelper.CreateMSBuildSettings(settings, target)); } else { Context.XBuild(path, XBuildHelper.CreateXBuildSettings(settings, path, target)); } } Context.Log.Verbose(string.Format("Finished build for {0} with platform {1}", relativeProjectFile, platformTarget)); }