예제 #1
0
        public override IEnumerable <CompilerVersion> GetAvailableCompilerVersions()
        {
            List <CompilerVersion> versions = new List <CompilerVersion>();

            if (DotnetDetection.IsDotnet35SP1Installed())
            {
                versions.Add(msbuild20);
                versions.Add(msbuild35);
            }
            versions.Add(msbuild40);
            return(versions);
        }
        internal Task <bool> RunBuildAsync(CancellationToken cancellationToken)
        {
            Dictionary <string, string> globalProperties = new Dictionary <string, string>();

            globalProperties.AddRange(SD.MSBuildEngine.GlobalBuildProperties);

            foreach (KeyValuePair <string, string> pair in options.Properties)
            {
                LoggingService.Debug("Setting property " + pair.Key + " to '" + pair.Value + "'");
                globalProperties[pair.Key] = pair.Value;
            }
            globalProperties["Configuration"] = options.Configuration;
            if (options.Platform == "Any CPU")
            {
                globalProperties["Platform"] = "AnyCPU";
            }
            else
            {
                globalProperties["Platform"] = options.Platform;
            }

            InterestingTasks.AddRange(parentBuildEngine.CompileTaskNames);

            loggers.Add(new SharpDevelopLogger(this));
            if (options.BuildOutputVerbosity == BuildOutputVerbosity.Diagnostic)
            {
                this.ReportMessageEvents         = true;
                this.ReportAllTaskFinishedEvents = true;
                this.ReportAllTaskStartedEvents  = true;
                this.ReportTargetFinishedEvents  = true;
                this.ReportTargetStartedEvents   = true;
                this.ReportUnknownEvents         = true;
                loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
                globalProperties["MSBuildTargetsVerbose"] = "true";
            }
            //loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
            foreach (IMSBuildAdditionalLogger loggerProvider in parentBuildEngine.AdditionalMSBuildLoggers)
            {
                loggers.Add(loggerProvider.CreateLogger(this));
            }

            loggerChain = new EndOfChain(this);
            foreach (IMSBuildLoggerFilter loggerFilter in parentBuildEngine.MSBuildLoggerFilters)
            {
                loggerChain = loggerFilter.CreateFilter(this, loggerChain) ?? loggerChain;
            }

            WriteAdditionalTargetsToTempFile(globalProperties);

            BuildJob job = new BuildJob();

            job.ProjectFileName = projectFileName;
            job.Target          = options.Target.TargetName;

            // First remove the flags for the controllable events.
            job.EventMask = EventTypes.All & ~ControllableEvents;
            // Add back active controllable events.
            if (ReportMessageEvents)
            {
                job.EventMask |= EventTypes.Message;
            }
            if (ReportTargetStartedEvents)
            {
                job.EventMask |= EventTypes.TargetStarted;
            }
            if (ReportTargetFinishedEvents)
            {
                job.EventMask |= EventTypes.TargetFinished;
            }
            if (ReportAllTaskStartedEvents)
            {
                job.EventMask |= EventTypes.TaskStarted;
            }
            if (ReportAllTaskFinishedEvents)
            {
                job.EventMask |= EventTypes.TaskFinished;
            }
            if (ReportUnknownEvents)
            {
                job.EventMask |= EventTypes.Unknown;
            }

            if (!(ReportAllTaskStartedEvents && ReportAllTaskFinishedEvents))
            {
                // just some TaskStarted & TaskFinished events should be reported
                job.InterestingTaskNames.AddRange(InterestingTasks);
            }
            foreach (var pair in globalProperties)
            {
                job.Properties.Add(pair.Key, pair.Value);
            }

            foreach (ILogger logger in loggers)
            {
                logger.Initialize(eventSource);
            }

            tcs = new TaskCompletionSource <bool>();
            if (projectMinimumSolutionVersion <= SolutionFormatVersion.VS2008)
            {
                if (DotnetDetection.IsDotnet35SP1Installed())
                {
                    BuildWorkerManager.MSBuild35.RunBuildJob(job, loggerChain, OnDone, cancellationToken);
                }
                else
                {
                    loggerChain.HandleError(new BuildError(job.ProjectFileName, ".NET 3.5 SP1 is required to build this project."));
                    tcs.SetResult(false);
                }
            }
            else
            {
                BuildWorkerManager.MSBuild40.RunBuildJob(job, loggerChain, OnDone, cancellationToken);
            }
            return(tcs.Task);
        }
예제 #3
0
 public override bool IsAvailable()
 {
     // .NET 2.0/3.0/3.5 can only be used if .NET 3.5 SP1 is installed
     return(DotnetDetection.IsDotnet35SP1Installed());
 }