J'ai une extension Visual Studio 2010, un fichier .vsix. Je peux obtenir l'instance DTE pour mon instance particulière de Visual Studio, que je confirme en imprimant le dte_instance.Solution.Fullname. Mais pour mon instance DTE2, il semble me donner des informations sur la mauvaise instance de Visual Studio.Extension Visual Studio 2010 (.vsix), obtention de l'instance DTE2
Voici le flux de travail: Développement Visual Studio IDE ouvert, code pour l'extension. Lancez le projet, ce qui provoque le lancement d'une nouvelle instance de Visual Studio sur laquelle l'extension est installée. Cliquez sur mon bouton de menu (dans la nouvelle IDE) qui exécute le code suivant:
DTE dte;
DTE2 dte2, dte2Macros;
dte = (DTE)GetService(typeof(DTE));
dte2 = (DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
dte2Macros = (DTE2)dte2.MacrosIDE;
//this returns what I expect, the solution name in the newer IDE.
MessageBox.Show("solution name: " + dte.Solution.FullName);
//code to get the startup project from MSDN
//http://msdn.microsoft.com/en-us/library/ms228782.aspx
SolutionBuild2 sb = (SolutionBuild2)dte2.Solution.SolutionBuild;
string msg = "";
Int32 configs = sb.SolutionConfigurations.Count;
foreach (String item in (Array)sb.StartupProjects)
{
msg += item;
}
//this returns a project from the development IDE, the one I don't want.
System.Windows.Forms.MessageBox.Show("startup project is: " + msg);
Project startupProject = dte2.Solution.Item(msg);
J'ai trouvé plusieurs références à l'acquisition de l'objet ETTD2 dans un Addin avec la méthode de connexion(), mais je ne pouvais pas trouver un rappel similaire pour les extensions.
La question: Comment obtient-on l'instance DTE2 pour l'EDI dans laquelle s'exécute une extension?
Fonctionne parfaitement, merci. – Adam
J'ai exactement le même problème, et j'utilisais exactement la même approche que lui, mais quand j'essaie votre solution, j'ai "Le nom 'Package' n'existe pas dans le contexte actuel". Quel est l'usage correct de celui-ci? – Marcelo
Vous aurez besoin d'une référence à 'Microsoft.VisualStudio.Shell.10.0.dll', et' using' pour 'Microsoft.VisualStudio.Shell'. –