Esempio n. 1
0
    /// <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);
            }
        }
    }
Esempio n. 2
0
    /// <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);
                }
            }
        }
    }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    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);
    }
Esempio n. 6
0
    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));
    }