Estoy codificando algún código de tiempo de diseño. Quiero utilizar este fragmento: (Encontrado here)Obtener el actual EnvDTE o IServiceProvider cuando NO está codificando un Addin
var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}
El problema es que esto no se compila. (GetService no es una llamada de método conocida) Intenté agregar Microsoft.VisualStudio.Shell (y Microsoft.VisualStudio.Shell.10.0) pero no me ayudó.
Al buscar en Internet encontré que necesita un IServiceProvider para llamar a esto.
Pero todos los ejemplos que muestran cómo obtener un IServiceProvider usan un EnvDTE.
Entonces, para obtener el EnvDTE actual necesito IServiceProvider. Pero para obtener un IServiceProvider necesito un EnvDTE. (Hay un agujero en mi cubo ...)
lo tanto, aquí está mi pregunta:
en una aplicación WPF normal, ¿cómo puedo obtener la instancia actual de EnvDTE?
NOTA: No estoy buscando ninguna instancia anterior de EnvDTE. Necesito el uno para mi instancia actual de Visual Studio (corro 3-4 instancias de Visual Studio a la vez.)
es su código de WPF aquí un proceso separado por completo, o código de WPF aún en marcha dentro de Visual Estudio a través de algún otro mecanismo? –
@jason - Simplemente una aplicación wpf normal. Planeo ejecutarlo en tiempo de diseño. Pero estaría contento con un ejemplo que funcionaría en tiempo de ejecución (en un evento OnClick, por ejemplo). (Cree una nueva aplicación wpf, arrastre un botón en la ventana y haga doble clic en él). – Vaccano
Debe llamar a GetActiveObject con un apodo apropiado para la instancia de VS que desee. ¿Es este el tipo de información que necesita: http://msdn.microsoft.com/en-us/library/ms228755.aspx? –