Erstellung des Arbeitsbereichs

Die Buildunterstützung in Open Folder-Szenarien erfordert eine Erweiterung, um indizierte und Dateikontextdaten für den Arbeitsbereich sowie die zu ausführende Build-Aktion zu liefern.

Im Folgenden finden Sie eine Gliederung darüber, was Ihre Erweiterung benötigt.

Dateikontext erstellen

  • Anbieterfabrik
    • ExportFileContextProviderAttribute Attribut mit supportedContextTypeGuids als alle anwendbaren string Konstanten von BuildContextTypes
    • Implementiert IWorkspaceProviderFactory<IFileContextProvider>
    • Dateikontextanbieter
      • Gebe ein FileContext für jeden unterstützten Buildvorgang und jede unterstützte Konfiguration zurück
        • Extraktion von $(AssemblyName) aus MSBuild
        • context implementiert IBuildConfigurationContext mit der Configuration Eigenschaft als Buildkonfiguration (z. B. "Debug|x86", "ret" oder null, falls nicht zutreffend). Verwenden Sie alternativ eine Instanz von BuildConfigurationContext. Der Konfigurationswert muss mit der Konfiguration aus dem indizierten Dateidatenwert übereinstimmen.

Wert der indizierten Builddateidaten

  • Provider-Factory
    • ExportFileScannerAttribute Attribut mit IReadOnlyCollection<FileDataValue> als unterstütztem Typ
    • Implementiert IWorkspaceProviderFactory<IFileScanner>
  • Dateiscanner auf ScanContentAsync<T>
    • Gibt Daten zurück, wenn es sich um FileScannerTypeConstants.FileDataValuesType das Typargument handelt.
    • Gibt einen Dateidatenwert für jede Konfiguration zurück, die mit:
      • type als BuildConfigurationContext.ContextTypeGuid
      • context als Buildkonfiguration (z. B. "Debug|x86", "ret" oder null falls nicht zutreffend). Dieser Wert muss mit der Konfiguration aus dem Dateikontext übereinstimmen.

Erstellen einer Dateikontextaktion

  • Anbieterfabrik
    • ExportFileContextActionProvider Attribut mit supportedContextTypeGuids als alle anwendbaren string Konstanten von BuildContextTypes
    • Implementiert IWorkspaceProviderFactory<IFileContextActionProvider>
  • Aktionsanbieter für IFileContextActionProvider.GetActionsAsync
    • Zurückgeben eines IFileContextAction Werts, der dem angegebenen FileContext.ContextType Wert entspricht
  • Dateikontextaktion
    • IFileContextAction und IVsCommandItem implementiert
    • CommandGroup Die Eigenschaft gibt 16537f6e-cb14-44da-b087-d1387ce3bf57 zurück.
    • CommandId ist 0x1000 für Erstellung, 0x1010 für Neuaufbau oder 0x1020 für die Bereinigung vorgesehen.

Hinweis

Da die FileDataValue indiziert werden muss, wird es einige Zeit dauern zwischen dem Öffnen des Arbeitsbereichs und dem Punkt, an dem die Datei für die vollständige Buildfunktion gescannt wird. Die Verzögerung wird beim ersten Öffnen eines Ordners angezeigt, da kein zuvor zwischengespeicherter Index vorhanden ist.

Melden von Nachrichten aus einem Build

Der Build kann Informationen, Warnungen und Fehlermeldungen für Benutzer auf eine von zwei Arten anzeigen. Die einfache Möglichkeit besteht darin, das IBuildMessageService zu verwenden und ein BuildMessage bereitzustellen, wie folgt:

using Microsoft.VisualStudio.Workspace;
using Microsoft.VisualStudio.Workspace.Build;

private static void OutputBuildMessage(IWorkspace workspace)
{
    IBuildMessageService buildMessageService = workspace.GetBuildMessageService();

    if (buildMessageService != null)
    {
      // Example error build message. See the documentation for BuildMessage for more information.
      var message = new BuildMessage()
      {
          Type = BuildMessage.TaskType.Error,
          Code = "MY1001",
          TaskText = "This is a sample error",
          ProjectFile = "buildfile.bld",
          File = "sourcefile.src"
          LogMessage = $"This is sample text that will only go to the Build output window pane.\n"

          // And any other properties to set
      };

      buildMessageService.ReportBuildMessages(new BuildMessage[] { message });
    }
}

BuildMessage.Type und BuildMessage.LogMessage steuern das Verhalten, wo dem Benutzer Informationen angezeigt werden. Jeder BuildMessage.TaskType andere Wert als None erzeugt einen Fehlerlisten-Eintrag mit den angegebenen Details. LogMessage wird immer im Fenster "Build " des Ausgabetoolfensters ausgegeben.

Alternativ können Erweiterungen direkt mit der Fehlerliste oder dem Buildbereich interagieren. In Versionen vor Visual Studio 2017, Version 15.7, ist ein Fehler vorhanden, bei dem das pszProjectUniqueName Argument OutputTaskItemStringEx2 ignoriert wird.

Warnung

Aufrufer von IFileContextAction.ExecuteAsync können beliebige zugrunde liegende Implementierungen für das IProgress<IFileContextActionProgressUpdate> Argument bereitstellen. Rufen Sie niemals direkt auf IProgress<IFileContextActionProgressUpdate>.Report(IFileContextActionProgressUpdate) . Es gibt derzeit keine allgemeinen Richtlinien für die Verwendung dieses Arguments, aber diese Richtlinien können geändert werden.

tasks.vs.json und launch.vs.json

Informationen zum Erstellen einer tasks.vs.json- oder launch.vs.json-Datei finden Sie unter Anpassen von Build- und Debugaufgaben.