Introducción a la extensibilidad de proyectos
Actualización: noviembre 2007
El modelo de objetos está disponible mediante la sencilla adición de una referencia VSLangProj a los ensamblados para el proyecto: VSLangProj.dll, VSLangProj2.dll, VSLangProj80.dll y VSLangProj90.dll. Para obtener más información, vea Cómo: Agregar o quitar referencias en Visual Studio (Visual Basic). Esto significa que el modelo de objetos está a disposición de macros, complementos y de cualquier tipo de proyecto que necesite extender o automatizar el IDE. Las macros se escriben en el entorno de desarrollo integrado de macros a través de Visual Basic. Los ejemplos de los temas se escriben en los lenguajes de Visual Basic y Visual C#. Para obtener más información sobre cómo ejecutar los ejemplos, vea Cómo: Compilar y ejecutar los ejemplos de código del modelo de objetos de automatización. Los complementos se pueden escribir en cualquier lenguaje hospedado de Visual Studio, como Visual Basic, Visual C#, Visual C++ y Visual J#. Los temas de referencia para los miembros de VSLangProj, VSLangProj2, VSLangProj80 y VslangProj90 incluyen la sintaxis de cada uno de estos lenguajes. Para obtener una descripción de los tipos de proyecto de automatización y de la funcionalidad de automatización, vea Crear complementos y asistentes.
Espacios de nombres de VSLangProj, VSLangProj2, VSLangProj80 y VSLangProj90
Estos espacios de nombres contienen todas las clases, interfaces y enumeraciones para proyectos de Visual Basic, Visual C# y Visual J#. Para obtener una lista completa de los objetos del espacio de nombres, vea Modelo de objetos de extensibilidad para proyectos de Visual Basic y Visual C#.
Posible error al utilizar los ensamblados VSLangProj con el ensamblado EnvDTE
Si crea un proyecto que hace referencia a uno o más ensamblados VSLangProj y el ensamblado EnvDTE, en algunas ocasiones se recibirá el siguiente error en tiempo de ejecución:
"Excepción no controlada: System.IO.FileNotFoundException: Error al cargar el archivo 'EnvDTE, Versión=7.0.3300.0"
Este error se produce debido a un conflicto de resolución de tipos en tiempo de ejecución. Es decir, la versión de EnvDTE que está incluida en Visual Studio 2005 es la 8.0.xx, pero la referencia de configuración del proyecto busca una versión anterior de este ensamblado, versión 7.0.xx. Para corregir este problema, debe agregar un redireccionamiento de enlace para la versión más reciente de EnvDTE al archivo de configuración (.config) del proyecto. De esta forma, permitirá que Visual Studio cargue la versión más reciente de EnvDTE y evitará que se produzca el error.
Para ello, agregue un "Archivo de configuración de aplicaciones" al proyecto y, a continuación, reemplace el contenido por lo siguiente:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-
com:asm.v1" appliesTo="v2.0.50318">
<dependentAssembly>
<assemblyIdentity name="EnvDTE" publicKeyToken=
"b03f5f7f11d50a3a"/>
<bindingRedirect oldVersion="7.0.3300.0"
newVersion="8.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Objeto VSProject2
Este objeto proporciona acceso a los demás objetos del modelo de extensibilidad. El objeto DTE es el objeto de nivel superior en el modelo de automatización de Visual Studio. En el modelo de extensibilidad general, un proyecto se representa mediante el objeto genérico Project. El objeto Project posee una propiedad Object. El tipo de esta propiedad lo determina en tiempo de ejecución el lenguaje del proyecto. En un proyecto de Visual Basic, Visual C# o Visual J#, la propiedad Object devuelve un objeto de tipo VSProject2. Puesto que el tipo de la propiedad Object es Object, debe convertir la referencia al tipo VSProject2. En una macro, la conversión tendrá el aspecto siguiente si el primer proyecto era un proyecto de Visual Basic:
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;
Una vez que tenga una referencia al elemento VSProject2, puede manipular las propiedades del objeto, las configuraciones, los archivos, las carpetas, las instrucciones de importación y las referencias.
Para obtener más información, vea Introducción al objeto VSProject2.
Objetos References y Reference
La propiedad References, que se encuentra almacenada en el objeto VSProject2, contiene una colección de objetos Reference3. El objeto Reference3 representa una referencia del proyecto y es, principalmente, un objeto de sólo lectura que admite un método Remove. El objeto References admite que se agreguen referencias (COM, ensamblados .NET, ActiveX, otros proyectos) y que se produzcan eventos (al agregar, quitar y modificar referencias).
El objeto References no contiene las referencias Web de un proyecto. Se pueden recuperar estas referencias obteniendo acceso a la propiedad ProjectItems de la propiedad WebReferencesFolder.
Para obtener más información y ejemplos de código, vea los objetos Reference y Reference3, la colección References y las propiedades References y WebReferencesFolder.
Imports (Objeto)
La propiedad Imports que se encuentra almacenada en el objeto VSProject2 mantiene una colección de instrucciones Imports que se aplican a un proyecto completo de Visual Basic. Si se agrega una instrucción de importación a esta colección, no es necesario agregar la instrucción Imports correspondiente (por ejemplo, Imports VSLangProj) al archivo de código. Este objeto admite que se agreguen y se quiten instrucciones de importación y que se produzcan eventos en respuesta a la adición y eliminación de instrucciones. No hay ningún equivalente en un proyecto de Visual C# y la propiedad VSProject2.Imports devuelve los valores Nothing o null cuando se aplica a un proyecto de Visual C#. Para obtener más información, vea Imports.
Objetos VSProjectItem y BuildManager
El objeto VSProjectItem es el elemento de proyecto correspondiente al objeto VSProject2. En el modelo de extensibilidad general, el objeto ProjectItem genérico representa un elemento de proyecto. La propiedad Object es de tipo Object y en un proyecto de Visual Basic o Visual C#, el tipo de esta propiedad es VSProjectItem. La conversión del objeto al tipo VSProjectItem tendría el aspecto siguiente en una macro:
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;
El objeto VSProjectItem contiene propiedades que lo vinculan al elemento de proyecto primario y al proyecto, así como un método que fuerza la ejecución de una herramienta personalizada en el elemento. El objeto BuildManager controla los resultados de la herramienta personalizada. Para obtener más información, vea el método RunCustomTool, el objeto Introducción al objeto BuildManager, VSProjectItem y el objeto BuildManager.
Propiedad Properties
El modelo de extensibilidad general tiene una propiedad Properties en tres objetos:
Objeto Project Las propiedades de este objeto son equivalentes a las que se encuentran en la ficha Propiedades comunes del cuadro de diálogo Páginas de propiedades del IDE.
Objeto Configuration Las propiedades de este objeto son equivalentes a las que se encuentran en la ficha Propiedades de configuración del cuadro de diálogo Páginas de propiedades del IDE.
Objeto ProjectItem Las propiedades de este objeto son equivalentes a las propiedades que se encuentran en la ventana Propiedades cuando se selecciona un elemento de proyecto en el Explorador de soluciones.
En cada caso, la propiedad Properties es una colección de objetos de tipo Property. Un objeto Property se puede obtener de la colección mediante la especificación bien del índice de la propiedad basado en 1 o de su nombre. El contenido de la colección depende del lenguaje. En el caso de los elementos de proyecto, el contenido depende también de si el elemento es un archivo o una carpeta.
Vea también
Conceptos
Espectro de automatización de Visual Studio