Cómo: Obtener acceso a propiedades de tipos de proyectos concretos
El modelo de automatización general de Visual Studio proporciona la colección Properties, que se puede utilizar para tener acceso a las colecciones Properties de cualquier tipo de proyecto de Visual Studio. Entre otras cosas, las propiedades de proyecto permiten controlar la configuración de seguridad, el nombre de ensamblado, etc.
Para establecer y examinar manualmente las propiedades del proyecto, abra un proyecto en el entorno de desarrollo integrado (IDE) de Visual Studio. En el menú Proyecto, haga clic en Propiedades. La ventana Propiedades tiene varias fichas y cada panel muestra las propiedades que se utilizan para definir y controlar el comportamiento de los proyectos. El modelo de automatización permite controlar esta configuración mediante programación. En concreto, las propiedades de ProjectProperties3 permiten controlar las propiedades de proyecto que se encuentran en los recuadros de ventana Aplicación, Recursos, Configuración, Rutas de acceso de referencia y Firma de la página Propiedades de los proyectos de Visual C#. Las propiedades definidas en VBProjectProperties3 permiten controlar la configuración de las propiedades de los proyectos de Visual Basic, que se encuentran en los paneles de ventana Aplicación, Recursos, Configuración, Referencias y Firma de la página Propiedades.
Las propiedades de los proyectos de Visual C# se definen en ProjectProperties3. Las propiedades de los proyectos de Visual Basic se definen en VBProjectProperties3. Las propiedades MyApplication y MyType sólo son específicas de los proyectos de Visual Basic. Las demás propiedades de VBProjectProperties3 son iguales a las propiedades de ProjectProperties3.
A estas propiedades no se puede tener acceso convirtiendo directamente un objeto Properties en un objeto ProjectProperties3 o VBProjectProperties3. En lugar de ello, a estas propiedades se debe tener acceso mediante la colección Properties, proporcionando el nombre de la propiedad del tipo de proyecto específico como una cadena, para precisar el objeto Property. Por ejemplo, el código, EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); permite tener acceso a la propiedad ApplicationIcon.
De hecho, las propiedades definidas en ProjectProperties3 y VBProjectProperties3 son una lista de referencia de las propiedades de proyectos específicos disponibles, a las que se puede tener acceso como elementos de propiedad de proyecto.
Los siguientes pasos explican cómo tener acceso mediante programación a estas propiedades en un complemento de Visual Studio.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.
Para tener acceso a las propiedades de un tipo específico de proyecto
Cree un proyecto de complemento de Visual Studio mediante Visual C#.
En el menú Proyecto, haga clic en Agregar referencia y en la pestaña .NET, seleccione VSLangProj, VSLangProj2, VSLangProj80 y System.Windows.Forms, y haga clic en Aceptar.
Agregue las siguientes instrucciones using al principio del archivo Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
Agregue una llamada a un nuevo método denominado VSProjectProperies al método OnConnection, después de la línea que establece el método _addInstance, como se muestra a continuación.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
Agregue el método VSProjectProperties inmediatamente después del método OnConnection.
public void VSProjectProperties(DTE2 dte) { try { // Open a Visual C# or Visual Basic project // before running this add-in. Project project; project = _applicationObject.Solution.Projects.Item(1); Property prop; prop = project.Properties.Item("AssemblyName"); MessageBox.Show("The assembly name is: " + prop.Value .ToString()); prop.Value = "MyTestAssembly"; MessageBox.Show("The assembly name is now: " + prop.Value.ToString()); // If the project is a Visual Basic project, set // the MyApplication property. if (project.Kind == "{F184B08F-C81C-45F6-A5F6-5ABD9991F28F}") { MessageBox.Show("The project is a Visual Basic Project"); prop = project.Properties.Item("MyType"); MessageBox.Show("The MyType value is: " + prop.Value.ToString()); prop.Value = "Class Library"; MessageBox.Show("The MyType value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
El método VSProjectProperties, para establecer y obtener la propiedad AssemblyName, la pasa como cadena del elemento Property a la colección Properties. Si el proyecto es de Visual Basic, el método VSProjectProperties también establece y obtiene la propiedad MyType.
La sección de ejemplo muestra el código completo.
Haga clic en Generar solución en el menú Generar para compilar el complemento.
Abra un proyecto de Visual C# o Visual Basic en el IDE de Visual Studio.
En el menú Herramientas, haga clic en Administrador de complementos y seleccione el complemento del cuadro de diálogo Administrador de complementos. Haga clic en Aceptar para ejecutar el complemento.
Para comprobar que el nombre del ensamblado ha cambiado, haga clic en Propiedades en el menú Proyecto y, a continuación, seleccione la ficha Aplicación en la ventana Propiedades.
El campo Nombre del ensamblado refleja el cambio realizado mediante programación.
Ejemplo
En el siguiente ejemplo de complemento básico de Visual Studio, se muestra cómo tener acceso a las propiedades de tipos de proyecto específicos, utilizando la automatización de Visual Studio.
using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using EnvDTE90a;
using EnvDTE100;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
using VSLangProj100;
namespace myAddin
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
VSProjectProperties(_applicationObject);
}
public void VSProjectProperties(DTE2 dte)
{
try
{
// Open a Visual C# or Visual Basic project
// before running this add-in.
Project project;
project = _applicationObject.Solution.Projects.Item(1);
Property prop;
prop = project.Properties.Item("AssemblyName");
MessageBox.Show("The assembly name is: "
+ prop.Value .ToString());
prop.Value = "MyTestAssembly";
MessageBox.Show("The assembly name is now: "
+ prop.Value.ToString());
// If the project is a Visual Basic project, set
// the MyApplication property.
if (project.Kind == PrjKind.prjKindVBProject)
{
MessageBox.Show
("The project is a Visual Basic Project");
prop = project.Properties.Item("MyType");
MessageBox.Show("The MyType value is: "
+ prop.Value.ToString());
prop.Value = "Class Library";
MessageBox.Show("The MyType value is now: "
+ prop.Value.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Imports VSLangProj100
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
VSProjectProperties(_applicationObject)
End Sub
Sub VSProjectProperties(ByVal dte As DTE2)
' Open a Visual C# or Visual Basic project
' before running this add-in.
Try
Dim project As Project
project = _applicationObject.Solution.Projects.Item(1)
Dim prop As [Property]
prop = project.Properties.Item("AssemblyName")
MsgBox("The assembly name is: " _
& prop.Value.ToString())
prop.Value = "MyTestAssembly"
MsgBox("The assembly name is now: " _
& prop.Value.ToString())
' If the project is a Visual Basic project, set
' the MyApplication property.
If project.Kind = PrjKind.prjKindVBProject Then
MsgBox("The project is a Visual Basic Project")
prop = project.Properties.Item("MyType")
MsgBox("The MyType value is: " _
& prop.Value.ToString())
prop.Value = "Class Library"
MsgBox("The MyType value is now: " _
& prop.Value.ToString())
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
Compilar el código
Para compilar este código, cree un nuevo proyecto de complemento de Visual Studio y reemplace el código del método OnConnection por el código del ejemplo. Para obtener información sobre cómo ejecutar un complemento, vea Cómo: Controlar complementos con el Administrador de complementos.