Freigeben über


Gewusst wie: Verfügbarmachen eines Add-Ins im Menü "Extras" (Visual C#)

Add-Ins für Visual Studio sind in Visual Studio 2013 veraltet. Sie müssen für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen. Weitere Informationen über das Durchführen eines Upgrades finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.

Wenn Sie mithilfe des Add-In-Assistenten ein Add-In erstellen und die Option zum Anzeigen des Add-Ins als Befehl auswählen, befindet sich der Befehl standardmäßig im Menü Extras. Wenn Sie bei der Add-In-Erstellung diese Option überspringen, können Sie den Add-In-Assistenten einfach erneut ausführen, die Option auswählen und den vorhandenen Code in das neue Add-In kopieren.

Sollte dies jedoch nicht möglich sein, erreichen Sie mithilfe der folgenden Prozedur dasselbe Ziel.

Hinweis

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen.Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert.Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

So fügen Sie einem vorhandenen Add-In einen Menübefehl hinzu

  1. Fügen Sie diese "using"-Anweisungen der Datei hinzu, die die Connect-Klasse enthält.

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    using System.Windows.Forms;
    
  2. Ändern Sie die Connect-Klassendeklaration so, dass IDTCommandTarget implementiert wird.

  3. Ersetzen oder ändern Sie den OnConnection()-Prozedurcode wie folgt:

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        if(connectMode == ext_ConnectMode.ext_cm_UISetup)
        {
            object []contextGUIDS = new object[] { };
            Commands2 commands = (Commands2)_applicationObject.Commands;
            string toolsMenuName;
    
            try
            {
                ResourceManager resourceManager = new     
                  ResourceManager("MyAddin1.CommandBar",  
                  Assembly.GetExecutingAssembly());
                CultureInfo cultureInfo = new 
                  System.Globalization.CultureInfo
                  (_applicationObject.LocaleID);
                string resourceName = String.Concat(cultureInfo.
                  TwoLetterISOLanguageName, "Tools");
                toolsMenuName = resourceManager.GetString(resourceName);
            }
            catch
            {
                toolsMenuName = "Tools";
            }
    
            CommandBar menuBarCommandBar = 
              ((CommandBars)_applicationObject.CommandBars)
              ["MenuBar"];
    
              CommandBarControl toolsControl = 
                menuBarCommandBar.Controls[toolsMenuName];
              CommandBarPopup toolsPopup = 
                (CommandBarPopup)toolsControl;
    
              try
              {
                  Command command = commands.AddNamedCommand2
                    (_addInInstance, "MyAddin1", "MyAddin1", "Executes  
                    the command for MyAddin1", true, 59, ref 
                    contextGUIDS, (int)vsCommandStatus.
                    vsCommandStatusSupported+(int)vsCommandStatus.
                    vsCommandStatusEnabled, (int)vsCommandStyle.
                    vsCommandStylePictAndText, vsCommandControlType.
                    vsCommandControlTypeButton);
    
                  if((command != null) && (toolsPopup != null))
                  {
                         command.AddControl(toolsPopup.CommandBar, 1);
                  }
            }
            catch(System.ArgumentException)
            {
            }
        }
    }
    
  4. Fügen Sie die folgenden beiden erforderlichen Prozeduren, QueryStatus und Exec hinzu:

    public void QueryStatus(string commandName, 
      vsCommandStatusTextWanted neededText, ref vsCommandStatus status, 
      ref object commandText)
    {
        if(neededText == 
          vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                status = (vsCommandStatus)vsCommandStatus.
                  vsCommandStatusSupported|vsCommandStatus.
                  vsCommandStatusEnabled;
                return;
            }
        }
    }
    
    public void Exec(string commandName, vsCommandExecOption 
      executeOption, ref object varIn, ref object varOut, ref bool 
      handled)
    {
        handled = false;
        if(executeOption ==  
          vsCommandExecOption.vsCommandExecOptionDoDefault)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                handled = true;
                    System.Windows.Forms.MessageBox.
                      Show("add-in running.");
                return;
            }
        }
    }
    

    Bei jeder Implementierung von IDTCommandTarget müssen Sie diese beiden Prozeduren hinzufügen. Um die Prozeduren schnell hinzuzufügen, wählen Sie im Editor im Dropdownfeld Klassenname in der linken oberen Ecke IDTCommandTarget aus. Wählen Sie dann jede Prozedur im Dropdownfeld Methodenname in der rechten oberen Ecke aus. Auf diese Weise werden die erforderlichen leeren Prozeduren mit den korrekten Parametern erstellt, denen Sie dann Code hinzufügen können.

    Die Exec-Prozedur wird aufgerufen, wenn ein Benutzer auf den Menübefehl klickt, d. h., Sie müssen an dieser Stelle den Code einfügen, der dann ausgeführt werden soll.

Siehe auch

Aufgaben

Gewusst wie: Verfügbarmachen eines Add-Ins im Menü "Extras" (Visual Basic)

Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager

Gewusst wie: Erstellen von Add-Ins

Konzepte

Diagramm "Automationsobjektmodell"