c# visual-studio solution vs-extensibility vspackage

c# - ¿Cómo se obtiene el directorio de la solución actual de un paquete de VSP?



visual-studio solution (2)

He encontrado la respuesta a la pregunta específica. El objeto VisualStudio.DTE se puede recuperar a través del método GetService() siguiente manera:

// Get an instance of the currently running Visual Studio IDE DTE dte = (DTE)GetService(typeof(DTE)); string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);

A continuación se muestra cómo obtendría el directorio de la solución actual de un complemento:

_applicationObject = (DTE2)application; // retrieved from OnConnection method string solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName);

¿Cómo harías esto a través de un VSPackage?

Estoy migrando un complemento de Visual Studio a un paquete de VS ya que tengo la intención de agregar algunos controles de usuario que requieren una integración más profunda con el IDE.

Encontré algunas buenas referencias sobre los méritos relativos de los complementos frente a los paquetes de integración, como: http://nayyeri.net/visual-studio-addin-vs-integration-package-part-1

Y algunos buenos tutoriales sobre msdn en VSPackages como: http://msdn.microsoft.com/en-us/library/cc138589.aspx

No he encontrado una buena referencia todavía (en msdn o de otro modo) sobre cómo las interfaces de nivel superior en los complementos (como DTE) se asignan a las interfaces de nivel inferior en los paquetes VSP.

¿Hay alguna buena referencia para ayudar con la asignación general de interfaces de complemento a interfaces de VSPackage?


Puede obtener un objeto DTE de una de estas funciones:

public static DTE GetCurrentDTE(IServiceProvider provider) { /*ENVDTE. */DTE vs = (DTE)provider.GetService(typeof(DTE)); if (vs == null) throw new InvalidOperationException("DTE not found."); return vs; } public static DTE GetCurrentDTE() { return GetCurrentDTE(/* Microsoft.VisualStudio.Shell. */ServiceProvider.GlobalProvider); }

Después de eso, puede obtener una Solution activa de DTE.Solution y la DTE.Solution Solution de la propiedad DTE.Solution.Path .