protected static Task <bool> BuildSolutionAsync(DTE dte)
        {
            return(Task.Factory.StartNew(() =>
            {
                var mre = new ManualResetEventSlim();
                var events = dte.Events.BuildEvents;
                _dispBuildEvents_OnBuildDoneEventHandler done = (scope, action) => mre.Set();
                events.OnBuildDone += done;
                try
                {
                    // Let build run async.
                    dte.Solution.SolutionBuild.Build();

                    // Wait until it's done.
                    mre.Wait();

                    // LastBuildInfo == # of projects that failed to build.
                    return dte.Solution.SolutionBuild.LastBuildInfo == 0;
                }
                catch
                {
                    return false;
                }
                finally
                {
                    // Cleanup handler.
                    events.OnBuildDone -= done;
                }
            }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default));
        }
        private void bindEventsOnBuild()
        {
            if (_buildEvents != null)
                return;

            _buildEvents = _applicationObject.Events.BuildEvents;
            _buildCompletedEvent = new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
            _buildEvents.OnBuildDone += _buildCompletedEvent;
        }
        private void bindEventsOnBuild()
        {
            if (_buildEvents != null)
            {
                return;
            }

            _buildEvents              = _applicationObject.Events.BuildEvents;
            _buildCompletedEvent      = new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
            _buildEvents.OnBuildDone += _buildCompletedEvent;
        }