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; }
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); }