protected override BuildResult Build(IProgressMonitor monitor, Solution solution, ConfigurationSelector configuration)
 {
     try {
         buildingSolution = true;
         BuildResult res = base.Build(monitor, solution, configuration);
         if (res.ErrorCount == 0)
         {
             SolutionAddinData data = solution.GetAddinData();
             if (data != null && data.Registry != null)
             {
                 data.Registry.Update(new ProgressStatusMonitor(monitor));
                 DispatchService.GuiDispatch(delegate {
                     data.NotifyChanged();
                 });
             }
         }
         return(res);
     } finally {
         buildingSolution = false;
     }
 }
        protected override BuildResult Build(IProgressMonitor monitor, SolutionEntityItem entry, ConfigurationSelector configuration)
        {
            DotNetProject project = entry as DotNetProject;
            AddinData     data    = project != null?AddinData.GetAddinData(project) : null;

            if (data != null)
            {
                monitor.BeginTask(null, buildingSolution ? 2 : 3);
            }

            BuildResult res = base.Build(monitor, entry, configuration);

            if (res.ErrorCount > 0 || data == null)
            {
                return(res);
            }

            monitor.Step(1);

            monitor.Log.WriteLine(AddinManager.CurrentLocalizer.GetString("Verifying add-in description..."));
            string      fileName = data.AddinManifestFileName;
            ProjectFile file     = data.Project.Files.GetFile(fileName);

            if (file == null)
            {
                return(res);
            }

            string addinFile;

            if (file.BuildAction == BuildAction.EmbeddedResource)
            {
                addinFile = project.GetOutputFileName(ConfigurationSelector.Default);
            }
            else
            {
                addinFile = file.FilePath;
            }

            AddinDescription desc   = data.AddinRegistry.GetAddinDescription(new ProgressStatusMonitor(monitor), addinFile);
            StringCollection errors = desc.Verify();

            foreach (string err in errors)
            {
                res.AddError(data.AddinManifestFileName, 0, 0, "", err);
                monitor.Log.WriteLine("ERROR: " + err);
            }

            if (!buildingSolution && project.ParentSolution != null)
            {
                monitor.Step(1);
                SolutionAddinData sdata = project.ParentSolution.GetAddinData();
                if (sdata != null && sdata.Registry != null)
                {
                    sdata.Registry.Update(new ProgressStatusMonitor(monitor));
                    DispatchService.GuiDispatch(delegate {
                        sdata.NotifyChanged();
                    });
                }
            }

            monitor.EndTask();

            return(res);
        }