示例#1
0
        public static async Task <DependencyGraphSpec> GetDependencyGraphSpec(DotNetProject project, ConfigurationSelector configuration, ILogger logger)
        {
            if (logger == null)
            {
                logger = NullLogger.Instance;
            }
            logger.Log(LogLevel.Information, GettextCatalog.GetString("Getting restore information for project {0}", project.FileName));

            using (var resultsPath = new TempFile(".output.dg")) {
                var context = new TargetEvaluationContext();
                context.GlobalProperties.SetValue("RestoreGraphOutputPath", resultsPath);

                using (var monitor = CreateProgressMonitor()) {
                    var result = await project.RunTarget(monitor, "GenerateRestoreGraphFile", configuration, context);

                    if (result != null)
                    {
                        foreach (BuildError error in result.BuildResult.Errors)
                        {
                            if (error.IsWarning)
                            {
                                logger.LogWarning(error.ToString());
                            }
                            else
                            {
                                logger.LogError(error.ToString());
                            }
                        }
                    }
                }
                return(GetDependencyGraph(resultsPath));
            }
        }
示例#2
0
 protected override Task <TargetEvaluationResult> OnRunTarget(
     ProgressMonitor monitor,
     string target,
     ConfigurationSelector configuration,
     TargetEvaluationContext context)
 {
     if (ProjectSystemService.IsEnabled)
     {
         return(OnMonitorRunTarget(monitor, target, configuration, context));
     }
     return(base.OnRunTarget(monitor, target, configuration, context));
 }
示例#3
0
        async Task <TargetEvaluationResult> OnMonitorRunTarget(
            ProgressMonitor monitor,
            string target,
            ConfigurationSelector configuration,
            TargetEvaluationContext context)
        {
            using (var buildMonitor = new MSBuildTargetMonitor(Project, target, configuration, context)) {
                try {
                    ProgressMonitor        modifiedMonitor = buildMonitor.GetProgressMonitor(monitor);
                    TargetEvaluationResult result          = await base.OnRunTarget(modifiedMonitor, target, configuration, context);

                    buildMonitor.OnResult(result);
                    return(result);
                } catch (Exception ex) {
                    buildMonitor.OnException(ex);
                    throw;
                }
            }
        }
示例#4
0
        bool IsCoreCompileDependsOn(string target, TargetEvaluationContext context)
        {
            if (!context.ItemsToEvaluate.Contains("Compile"))
            {
                return(false);
            }

            // The following is based on Project.GetCompileItemsFromCoreCompileDependenciesAsync
            // and determines whether the CoreCompileDependsOn is being run.
            var coreCompileDependsOn = Project.MSBuildProject.EvaluatedProperties.GetValue <string> ("CoreCompileDependsOn");

            if (string.IsNullOrEmpty(coreCompileDependsOn))
            {
                return(false);
            }

            var dependsList = string.Join(";", coreCompileDependsOn.Split(new [] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).Where(s => s.Length > 0));

            return(target == dependsList);
        }
        public MSBuildTargetMonitor(
            Project project,
            string target,
            ConfigurationSelector configuration,
            TargetEvaluationContext context)
        {
            // Ensure log verbosity is set for non-build targets.
            this.context         = context;
            context.LogVerbosity = Runtime.Preferences.MSBuildVerbosity.Value;

            buildTarget = new MSBuildTarget {
                ProjectName     = project.Name,
                ProjectFileName = project.FileName,
                Targets         = target ?? string.Empty,
                BuildType       = MSBuildTarget.GetBuildType(target),
                Dimensions      = project.GetDimensions(configuration)
            };

            buildTarget.Start();

            ProjectSystemService.OnTargetStarted(buildTarget);
        }
示例#6
0
 protected override Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     if (Project is DotNetProject dotNetProject && IsCoreCompileDependsOn(target, context))
     {
         if (DotNetCoreNuGetProject.CanCreate(dotNetProject))
         {
             return(OnRunDotNetCoreProjectTarget(monitor, target, configuration, context));
         }
         else if (PackageReferenceNuGetProject.CanCreate(dotNetProject))
         {
             return(OnRunPackageReferenceProjectTarget(monitor, target, configuration, context));
         }
     }
     return(base.OnRunTarget(monitor, target, configuration, context));
 }
示例#7
0
 /// <summary>
 /// Ensures any NuGet package content files are included when CoreCompileDependsOn is evaluated.
 /// Visual Studio 2017 does not run the ResolveNuGetPackageAssets target directly but seems to
 /// run the Compile target for the project which indirectly runs ResolveNuGetPackageAssets.
 /// </summary>
 Task <TargetEvaluationResult> OnRunPackageReferenceProjectTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     target += ";ResolveNuGetPackageAssets";
     context.GlobalProperties.SetValue("ResolveNuGetPackages", true);
     return(base.OnRunTarget(monitor, target, configuration, context));
 }
示例#8
0
 /// <summary>
 /// Ensures any NuGet package content files are included when CoreCompileDependsOn is evaluated.
 /// Visual Studio 2017 does not run the RunProductContentAssets target directly but runs a set of
 /// targets which indirectly run RunProductContentAssets.
 /// </summary>
 Task <TargetEvaluationResult> OnRunDotNetCoreProjectTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     target += ";RunProduceContentAssets";
     return(base.OnRunTarget(monitor, target, configuration, context));
 }
示例#9
0
        void OverrideMSBuildExtensionsPathToFixBuild(TargetEvaluationContext context)
        {
            string path = Path.GetFullPath(Path.Combine(sdkPaths.MSBuildSDKsPath, ".."));

            context.GlobalProperties.SetValue("MSBuildExtensionsPath", path);
        }
示例#10
0
        internal protected override TargetEvaluationContext OnConfigureTargetEvaluationContext(string target, ConfigurationSelector configuration, TargetEvaluationContext context)
        {
            var c = base.OnConfigureTargetEvaluationContext(target, configuration, context);

            context.GlobalProperties.SetValue("Foo", ControlValue);
            return(c);
        }
        public override DeployFileCollection GetProjectDeployFiles(DeployContext ctx, Project project, ConfigurationSelector configuration)
        {
            var deployFiles = new DeployFileCollection();

            base.GetProjectDeployFiles(ctx, project, configuration);

            // Add the compiled output files

            var pconf   = (ProjectConfiguration)project.GetConfiguration(configuration);
            var evalCtx = new TargetEvaluationContext();

            evalCtx.ItemsToEvaluate.Add("AllPublishItemsFullPathWithTargetPath");

            if (project.MSBuildProject.UseMSBuildEngine)
            {
                var result = project.RunTarget(new ProgressMonitor(), "GetCopyToPublishDirectoryItems", configuration, evalCtx).Result;
                foreach (var item in result.Items)
                {
                    if (item.Name == "AllPublishItemsFullPathWithTargetPath")
                    {
                        var fromPath = MSBuildProjectService.FromMSBuildPath(project.ItemDirectory, item.Include);
                        var toPath   = item.Metadata.GetPathValue("TargetPath", relativeToPath: pconf.OutputDirectory);
                        deployFiles.Add(new DeployFile(project, fromPath, toPath, TargetDirectory.ProgramFiles));
                    }
                }
            }
            else
            {
#pragma warning disable 618 //obsolete
                FilePath outDir = pconf.OutputDirectory;
                foreach (FilePath file in project.GetOutputFiles(configuration))
                {
                    deployFiles.Add(new DeployFile(project, file, file.ToRelative(outDir), TargetDirectory.ProgramFiles));
                }
                foreach (FileCopySet.Item item in project.GetSupportFileList(configuration))
                {
                    deployFiles.Add(new DeployFile(project, item.Src, item.Target, TargetDirectory.ProgramFiles));
                }
#pragma warning restore 618
            }

            // Collect deployable files
            foreach (ProjectFile file in project.Files)
            {
                // skip CopyToOutputDirectory files when it's just a project build, because
                // MonoDevelop.Project.Projects already copies these files using more subtle overwriting
                // semantics
                if (file.CopyToOutputDirectory != FileCopyMode.None)
                {
                    continue;
                }

                var props = new DeployProperties(file);
                if (props.ShouldDeploy)
                {
                    var dp = new DeployFile(file);
                    deployFiles.Add(dp);
                }
            }

            return(deployFiles);
        }
 protected override bool OnFastCheckNeedsBuild(ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     CheckPropertyValue = context.GlobalProperties.GetValue <bool> ("IsBuildingForExecution");
     return(true);
 }
 protected override bool OnFastCheckNeedsBuild(ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     return(!IsBuildUpToDate);
 }
        protected override Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
        {
            if (target == ProjectService.BuildTarget)
            {
                target = "all";
            }
            else if (target == ProjectService.CleanTarget)
            {
                target = "clean";
            }

            DotNetProjectConfiguration conf = (DotNetProjectConfiguration)Project.GetConfiguration(configuration);

            return(Task <TargetEvaluationResult> .Factory.StartNew(delegate {
                using (var output = new StringWriter()) {
                    using (var tw = new LogTextWriter()) {
                        tw.ChainWriter(output);
                        tw.ChainWriter(monitor.Log);

                        using (ProcessWrapper proc = Runtime.ProcessService.StartProcess("make", "PROFILE=" + conf.Id + " " + target, conf.OutputDirectory, monitor.Log, tw, null))
                            proc.WaitForOutput();

                        tw.UnchainWriter(output);
                        tw.UnchainWriter(monitor.Log);

                        CompilerResults cr = new CompilerResults(null);
                        string[] lines = output.ToString().Split('\n');
                        foreach (string line in lines)
                        {
                            CompilerError err = CreateErrorFromString(line);
                            if (err != null)
                            {
                                cr.Errors.Add(err);
                            }
                        }

                        return new TargetEvaluationResult(new BuildResult(cr, output.ToString()));
                    }
                }
            }));
        }
        protected async override Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
        {
            if (target == ProjectService.BuildTarget)
            {
                var config = GetConfiguration(configuration) as DotNetProjectConfiguration;
                using (var builder = new DnxProjectBuilder(this, monitor)) {
                    BuildResult result = await builder.BuildAsnc(config);

                    LastBuildTime = DateTime.Now;
                    return(new TargetEvaluationResult(result));
                }
            }
            return(new TargetEvaluationResult(BuildResult.CreateSuccess()));
        }
        protected override System.Threading.Tasks.Task <TargetEvaluationResult> OnRunTarget(MonoDevelop.Core.ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
        {
            DotNetProjectConfiguration conf = (DotNetProjectConfiguration)Project.GetConfiguration(configuration);

            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - Configuration: " + conf.Name);
            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - Platform: " + conf.Platform);
            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - conf.TargetFramework.Name: " + conf.TargetFramework.Name);
            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - conf.TargetRuntime.DisplayName: " + conf.TargetRuntime.DisplayName);
            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - Project.Name: " + Project.Name);
            MonoDevelop.Core.LoggingService.LogInfo("ProjectExtensionAddIn - Target: " + target);

            // Update project version if not the same as solution version
            if (target.Equals("Build"))
            {
                if (Project.Version.Equals(Project.ParentSolution.Version) == false)
                {
                    Project.Version = Project.ParentSolution.Version;
                }

                // load version propfile

                if (Project.TargetFramework.Id.Identifier.Equals("MonoAndroid"))
                {
                    // update Android Manifest
                    // update AssemblyInfo
                }
                if (Project.TargetFramework.Id.Identifier.Equals("Xamarin.iOS"))
                {
                    // update Info.plist
                    // update AssemblyInfo
                }
                if (Project.TargetFramework.Id.Identifier.Equals(".NETPortable"))
                {
                    // update AssemblyInfo
                }
            }

            return(base.OnRunTarget(monitor, target, configuration, context));
        }
示例#17
0
 protected override System.Threading.Tasks.Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     return(base.OnRunTarget(monitor, target, configuration, context));
 }
示例#18
0
 // HACK: The FSharp.NET.Core.Sdk.targets defines the path to dotnet using:
 // <_DotNetHostExecutableDirectory>$(MSBuildExtensionsPath)/../..</_DotNetHostExecutableDirectory>
 // MSBuildExtensionsPath points to MSBuild supplied with Mono so building FSharp
 // projects fails using this path since dotnet does not ship with Mono. The
 // _DotNetHostExecutableDirectory cannot be overridden so as a workaround for
 // F# projects the MSBuildExtensionsPath is redefined to point to the .NET Core
 // SDK folder.
 protected override Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
 {
     if (target == ProjectService.BuildTarget)
     {
         if (IsFSharpSdkProject())
         {
             OverrideMSBuildExtensionsPathToFixBuild(context);
         }
     }
     return(base.OnRunTarget(monitor, target, configuration, context));
 }