Determining what kind of build (clean/build/rebuildall) is currently being performed is easy with DTE2.BuildEvents:
DTE2 dte = ...;
dte.Events.BuildEvents.OnBuildBegin += new _dispBuildEvents_OnBuildBeginEventHandler(OnSolutionBuildBegin);
void OnSolutionBuildBegin(vsBuildScope Scope, vsBuildAction Action)
{
// Do something only if this is a build, not a clean
if (action != EnvDTE.vsBuildAction.vsBuildActionBuild && action != EnvDTE.vsBuildAction.vsBuildActionRebuildAll)
// return;
...
}
How to do the same from a package? For some reason I absolutely need to use IVsUpdateSolutionEvents2 interface, so I'm doing this:
IVsSolutionBuildManager2 solutionBuildManager = ...;
solutionBuildManager.AdviseUpdateSolutionEvents(this /*IVsUpdateSolutionEvents2*/, out cookieUpdateSolutionEvents2);
public int UpdateSolution_Begin(ref int pfCancelUpdate)
{
// How to figure out the build type here (EnvDTE.vsBuildAction or some other Clean/Build/RebuildAll enum)?
}
public int UpdateSolution_StartUpdate(ref int pfCancelUpdate)
{
// Or here?
}
Thanks in advance for help.