Vous avez probablement compris cela depuis longtemps, mais de toute façon: Vous pouvez configurer vos événements de l'intérieur OnConnection
comme indiqué ci-dessous, voici un extrait de Connect classe d'un Addin (en supposant que vous utilisez C#):
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using EnvDTE;
using EnvDTE80;
using Extensibility;
using Microsoft.VisualStudio.CommandBars;
namespace MyAddin1
{
/// <summary>The object for implementing an Add-in.</summary>
/// <seealso class='IDTExtensibility2' />
public class Connect : IDTExtensibility2, IDTCommandTarget
{
private DTE2 _applicationObject;
private AddIn _addInInstance;
private SolutionEvents _solutionEvents;
public void OnConnection(object application, ext_ConnectMode connectMode,
object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
// check the value of connectMode here, depending on your scenario
if(connectMode == ...)
SetupEvents();
}
private void SetupEvents()
{
// this is important ...
_solutionEvents = _applicationObject.Events.SolutionEvents;
// wire up the events you need
_solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(_solutionEvents_Opened);
_solutionEvents.AfterClosing += new _dispSolutionEvents_AfterClosingEventHandler(_solutionEvents_AfterClosing);
_solutionEvents.ProjectAdded += new _dispSolutionEvents_ProjectAddedEventHandler(_solutionEvents_ProjectAdded);
}
// add procedures to handle the events here, plus any other
// handling you need, ie. OnDisconnection and friends
}
L'essentiel est de câbler la solution et de projeter les événements dont vous avez besoin, ce n'est pas important si une solution ou un projet est déjà chargé. Ils ne sont liés à aucune solution ou projet particulier, ils sont fournis par le modèle d'objet Visual Studio et sont incorporés dans l'espace de noms EnvDTE.
Cela n'aurait aucun sens de faire quoi que ce soit d'autre, puisque vous pouvez configurer un addin à charger lorsque VS démarre, et dans ce cas il n'y aura jamais de solutions/projets chargés.
Il y a quelques prises si:
- Il est importante que vous gardez une référence à la classe SolutionEvents comme une variable de membre au sein de votre classe de connexion, sinon the events will never fire, (see also here). Vous devez vous assurer de vérifier le paramètre
connectMode
passé dans OnConnection
. Cela est appelé plusieurs fois avec des paramètres différents, et si vous le faites de la mauvaise façon, vous pouvez obtenir l'événement plusieurs fois, ce qui sera certainement un problème. En outre, généralement tout IDE Addin, comme Menus et autres, est configuré à partir de OnConnection
, de sorte que vous pouvez vous retrouver avec des éléments de menu en double si vous ne le faites pas correctement.
est ici quelques conseils, une partie du code fourni est le code VB, dans le cas où vous êtes à la recherche que:
Enfin, voici une liste d'articles, environ 70% d'entre eux couvrent des sujets de base et avancés concernant les addins:
Trouver la section MZ-Tools Articles série (add-ins) sur et jeter un oeil à ce qui est couvert là-bas.