Esempio n. 1
0
        public Task <bool> BuildAsync(ICollection <Project> projects)
        {
            var projectHierarchy = projects.Select(project => project.GetHierarchy()).ToArray();
            var buildUpdateFlags = Enumerable.Repeat((uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD, projectHierarchy.Length).ToArray();

            // Launches an asynchronous build operation and returns S_OK immediately if the build begins.
            // The result does not indicate completion or success of the build
            var updateErrorCode = _buildManager.StartUpdateSpecificProjectConfigurations(
                (uint)projects.Count,
                projectHierarchy,
                null,
                null,
                buildUpdateFlags,
                null,
                (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
                0);

            var tcs = new TaskCompletionSource <bool>();

            if (updateErrorCode == S_OK)
            {
                var builder = new ProjectAsyncBuilder(_buildManager, tcs);
                _buildManager.AdviseUpdateSolutionEvents(builder, out builder.UpdateSolutionEventsCookie);
            }
            else
            {
                tcs.SetResult(false);
            }

            return(tcs.Task);
        }
        public Task<bool> BuildAsync(ICollection<Project> projects)
        {
            var projectHierarchy = projects.Select(project => project.GetHierarchy()).ToArray();
            var buildUpdateFlags = Enumerable.Repeat((uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD, projectHierarchy.Length).ToArray();

            // Launches an asynchronous build operation and returns S_OK immediately if the build begins.
            // The result does not indicate completion or success of the build
            var updateErrorCode = _buildManager.StartUpdateSpecificProjectConfigurations(
                (uint)projects.Count,
                projectHierarchy,
                null,
                null,
                buildUpdateFlags,
                null,
                (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
                0);

            var tcs = new TaskCompletionSource<bool>();

            if (updateErrorCode == S_OK)
            {
                var builder = new ProjectAsyncBuilder(_buildManager, tcs);
                _buildManager.AdviseUpdateSolutionEvents(builder, out builder.UpdateSolutionEventsCookie);
            }
            else
            {
                tcs.SetResult(false);
            }

            return tcs.Task;
        }
Esempio n. 3
0
        public virtual async Task <bool> BuildAsync(IEnumerable <Project> projects)
        {
            if (projects == null)
            {
                throw new ArgumentNullException(nameof(projects));
            }

            if (!projects.Any())
            {
                return(true);
            }

            var bag = new ConcurrentBag <IVsHierarchy>();

            foreach (var project in projects)
            {
                var hierarchy = await ProjectMapper.GetVsHierarchyAsync(project).ConfigureAwait(false);

                bag.Add(hierarchy);
            }

            var hierarchies = bag.ToArray();

            var buildUpdateFlags = Enumerable.Repeat((uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD, hierarchies.Length).ToArray();

            // Launches an asynchronous build operation and returns S_OK immediately if the build begins.
            // The result does not indicate completion or success of the build
            var updateErrorCode = _buildManager.StartUpdateSpecificProjectConfigurations(
                (uint)projects.Count(),
                hierarchies,
                null,
                null,
                buildUpdateFlags,
                null,
                (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
                0);

            var tcs = new TaskCompletionSource <bool>();

            if (updateErrorCode == S_OK)
            {
                var builder = new ProjectAsyncBuilder(_buildManager, tcs);
                _buildManager.AdviseUpdateSolutionEvents(builder, out builder.UpdateSolutionEventsCookie);
            }
            else
            {
                tcs.SetResult(false);
            }

            return(await tcs.Task);
        }