Aktuelle Typ des build-Aktion aus Visual Studio von Microsoft.VisualStudio.Shell.Interop

In einigen Erweiterung setzen wir die IVsUpdateSolutionEvents2
und IVsSolutionBuildManager2 verwendet für die Registrierung von Anrufer mit der AdviseUpdateSolutionEvents

Zum Beispiel, dies wird aufgerufen, bevor alle build-Aktionen haben begonnen:

public int UpdateSolution_Begin(ref int pfCancelUpdate)
{
    ...
}

Allerdings müssen auch immer die status, oder geben Sie die aktuelle build-Aktionen, wie zum Beispiel: Aufbau/Wiederaufbau/reinigen/bereitstellen

Verfügbar & bekannten Varianten:

BuildEvents

Mit der Veranstaltungen.BuildEvents ich abonnieren kann OnBuildBegin, zum Beispiel:

_buildEvents.OnBuildBegin += new _dispBuildEvents_OnBuildBeginEventHandler((vsBuildScope Scope, vsBuildAction Action) => {
    buildType = (BuildType)Action;
});

und verwenden Sie die buildType in alle Orte, da die vsBuildAction bietet alle notwendigen Informationen

aber die UpdateSolution_Begin /UpdateSolution_StartUpdate genannte erste als Priorität die Beratung der Methode, und als Ergebnis die buildType setzt zu spät..

auch wir können mit diesem OnBuildBegin statt UpdateProjectCfg_Begin /UpdateSolution_StartUpdate, aber unser Umgang ist auch notwendig so bald wie möglich mit Priorität Anrufer

IVsUpdateSolutionEvents4

Den IVsUpdateSolutionEvents4.UpdateSolution_BeginUpdateAction bietet die dwAction und feuerte vor jedem update-Aktion beginnt in Lösung zu bauen - vor dem ersten UpdateProjectCfg_Begin

ist es genau das was ich brauche! da dwAction kann ich überprüfen mit der VSSOLNBUILDUPDATEFLAGS

Jedoch 🙁 es erschien in VS2012, unsere Erweiterung unterstützt VS2010 und höher... so müssen auch die Variante für die version 2010

UpdateProjectCfg_Begin

Den IVsUpdateSolutionEvents2.UpdateProjectCfg_Begin bietet auch die dwAction (siehe auch VSSOLNBUILDUPDATEFLAGS) und für 2010-version, aber es ist das gleiche wie das erste BuildEvents-Variante - es ist zu spät für die Handhabung (und nicht ganz passend für unsere Aufgabe)

Frage

Ich kann nicht finden die Dokumentation für diese, jedoch sind die VSSOLNBUILDUPDATEFLAGS
verfügbar für VS2010, so denke ich, sollte die Variante für bekommen dieses als aktuellen Zustand des build-Aktion, e.g als mit __VSHPROPID und GetProperty für IVsHierarchy etc...

ist es möglich ? oder kann ich nur mit OnBuildBegin Abonnement o_O


upd1:

__VSHPROPID4

gefunden mit \VisualStudioIntegration\Common\Inc\vsshell100.h:

enum __VSHPROPID4
    {   VSHPROPID_TargetFrameworkMoniker    = -2102,
    VSHPROPID_ExternalItem  = -2103,
    VSHPROPID_SupportsAspNetIntegration = -2104,
    VSHPROPID_DesignTimeDependencies    = -2105,
    VSHPROPID_BuildDependencies = -2106,
    VSHPROPID_BuildAction   = -2107,
    VSHPROPID_DescriptiveName   = -2108,
    VSHPROPID_AlwaysBuildOnDebugLaunch  = -2109,
    VSHPROPID_FIRST4    = -2109
    } ;
typedef /* [public] */ DWORD VSHPROPID4;

so, sah doc. - BSTR __VSHPROPID4.VSHPROPID_BuildAction - ruft die build-Aktion für ein Element

ok, eine gute Nachricht, nächste Schritt... versuchen zu erhalten, zum Beispiel:

object type;
hr.GetProperty((uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID4.VSHPROPID_BuildAction, out type);

denen der hr-Bereich ein, zum Beispiel:

IVsSolutionBuildManager2 sbm = (IVsSolutionBuildManager2)ServiceProvider.GlobalProvider.GetService(typeof(SVsSolutionBuildManager));

IVsHierarchy hr = null;
sbm.get_StartupProject(out hr);

Aber der Typ ist immer null... kann es problem mit der Benachrichtigung(hat nicht stattgefunden), sondern auch ähnliches Ergebnis, wenn verwendet pHierProj von UpdateProjectCfg_Begin /UpdateProjectCfg_Done:

int UpdateProjectCfg_Begin(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, ref int pfCancel)
int UpdateProjectCfg_Done(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, int fSuccess, int fCancel)

die bereits die dwAction...

und. wie zu verwenden VSHPROPID_BuildAction -_- problem mit IVsHierarchy ?

  • Nachgehakt: die Hälfte der Zeit, wenn die Leute versuchen, zu Haken in Visual Studio build-Informationen, was Sie wirklich wollen, zu tun ist Haken in MSBuild direkt zu erweitern, Ihre build-system. Was ist das ultimative Ziel, das Sie zu erreichen versuchen?
  • siehe hier geplanten Rahmen der build-Aktion für die nächste version
InformationsquelleAutor Denis Kuzmin | 2014-11-19
Schreibe einen Kommentar