예제 #1
0
        protected override async Task <bool> TryHandleCommandAsync(IProjectTree node, bool focused, long commandExecuteOptions, IntPtr variantArgIn, IntPtr variantArgOut)
        {
            if (!ShouldHandle(node))
            {
                return(false);
            }

            if (await IsReadyToBuildAsync())
            {
                // Build manager APIs require UI thread access.
                await _threadingService.SwitchToUIThread();

                // Save documents before build.
                var projectVsHierarchy = (IVsHierarchy)Project.Services.HostObject;
                ErrorHandler.ThrowOnFailure(_buildManager !.SaveDocumentsBeforeBuild(projectVsHierarchy, (uint)VSConstants.VSITEMID.Root, 0 /*docCookie*/));

                // Enable generating package on build ("GeneratePackageOnBuild") for all projects being built.
                _generatePackageOnBuildPropertyProvider.OverrideGeneratePackageOnBuild(true);

                // Kick off the build.
                uint dwFlags = (uint)(VSSOLNBUILDUPDATEFLAGS.SBF_SUPPRESS_SAVEBEFOREBUILD_QUERY | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD);
                ErrorHandler.ThrowOnFailure(_buildManager.StartSimpleUpdateProjectConfiguration(projectVsHierarchy, null, null, dwFlags, 0, 0));
            }

            return(true);
        }
        protected override async Task <bool> TryHandleCommandAsync(IProjectTree node, bool focused, long commandExecuteOptions, IntPtr variantArgIn, IntPtr variantArgOut)
        {
            if (!ShouldHandle(node))
            {
                return(false);
            }

            if (await IsReadyToBuildAsync())
            {
                // Build manager APIs require UI thread access.
                await _threadingService.SwitchToUIThread();

                // Save documents before build.
                var projectVsHierarchy = (IVsHierarchy)Project.Services.HostObject;
                ErrorHandler.ThrowOnFailure(_buildManager !.SaveDocumentsBeforeBuild(projectVsHierarchy, (uint)VSConstants.VSITEMID.Root, 0 /*docCookie*/));

                // We need to make sure dependencies are built so they can go into the package
                ErrorHandler.ThrowOnFailure(_buildManager.CalculateProjectDependencies());

                // Assembly our list of projects to build
                var projects = new List <IVsHierarchy>
                {
                    projectVsHierarchy
                };

                // First we find out how many dependent projects there are
                uint[] dependencyCounts = new uint[1];
                ErrorHandler.ThrowOnFailure(_buildManager.GetProjectDependencies(projectVsHierarchy, 0, null, dependencyCounts));

                if (dependencyCounts[0] > 0)
                {
                    // Get all of the dependent projects, and add them to our list
                    var projectsArray = new IVsHierarchy[dependencyCounts[0]];
                    ErrorHandler.ThrowOnFailure(_buildManager.GetProjectDependencies(projectVsHierarchy, dependencyCounts[0], projectsArray, dependencyCounts));
                    projects.AddRange(projectsArray);
                }

                // Turn off "GeneratePackageOnBuild" because otherwise the Pack target will not do a build, even if there is no built output
                _generatePackageOnBuildPropertyProvider.OverrideGeneratePackageOnBuild(false);

                uint dwFlags = (uint)(VSSOLNBUILDUPDATEFLAGS.SBF_SUPPRESS_SAVEBEFOREBUILD_QUERY | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD);

                uint[] buildFlags = new uint[projects.Count];
                // We tell the Solution Build Manager to Package our project, which will call the Pack target, which will build if necessary.
                // Any dependent projects will just do a normal build
                buildFlags[0] = VSConstants.VS_BUILDABLEPROJECTCFGOPTS_PACKAGE;

                ErrorHandler.ThrowOnFailure(_buildManager.StartUpdateSpecificProjectConfigurations(cProjs: (uint)projects.Count,
                                                                                                   rgpHier: projects.ToArray(),
                                                                                                   rgpcfg: null,
                                                                                                   rgdwCleanFlags: null,
                                                                                                   rgdwBuildFlags: buildFlags,
                                                                                                   rgdwDeployFlags: null,
                                                                                                   dwFlags: dwFlags,
                                                                                                   fSuppressUI: 0));
            }

            return(true);
        }
예제 #3
0
        protected override async Task <bool> TryHandleCommandAsync(IProjectTree node, bool focused, long commandExecuteOptions, IntPtr variantArgIn, IntPtr variantArgOut)
        {
            if (!ShouldHandle(node))
            {
                return(false);
            }

            if (await IsReadyToBuildAsync())
            {
                // Build manager APIs require UI thread access.
                await _threadingService.SwitchToUIThread();

                Assumes.NotNull(Project.Services.HostObject);

                // Save documents before build.
                var projectVsHierarchy = (IVsHierarchy)Project.Services.HostObject;
                _solutionBuildManager.SaveDocumentsBeforeBuild(projectVsHierarchy, (uint)VSConstants.VSITEMID.Root, docCookie: 0);

                // We need to make sure dependencies are built so they can go into the package
                _solutionBuildManager.CalculateProjectDependencies();

                // Assembly our list of projects to build
                var projects = new List <IVsHierarchy>
                {
                    projectVsHierarchy
                };

                projects.AddRange(_solutionBuildManager.GetProjectDependencies(projectVsHierarchy));

                // Turn off "GeneratePackageOnBuild" because otherwise the Pack target will not do a build, even if there is no built output
                _generatePackageOnBuildPropertyProvider.OverrideGeneratePackageOnBuild(false);

                uint dwFlags = (uint)(VSSOLNBUILDUPDATEFLAGS.SBF_SUPPRESS_SAVEBEFOREBUILD_QUERY | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD);

                uint[] buildFlags = new uint[projects.Count];
                // We tell the Solution Build Manager to Package our project, which will call the Pack target, which will build if necessary.
                // Any dependent projects will just do a normal build
                buildFlags[0] = VSConstants.VS_BUILDABLEPROJECTCFGOPTS_PACKAGE;

                _solutionBuildManager.StartUpdateSpecificProjectConfigurations(projects.ToArray(), buildFlags, dwFlags);
            }

            return(true);
        }