Cómo: Obtener acceso a las propiedades de configuración de tipos específicos de proyectos
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 del proyecto permiten controlar la configuración de seguridad, la configuración de compilación y la configuración de depuración.
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 le permite controlar esta configuración mediante programación.En concreto, las propiedades que aparecen en CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4 y ProjectConfigurationProperties3 permiten controlar las propiedades de proyecto que se encuentran en los paneles de ventana Compilar (Compilar para proyectos de Visual Basic), Depurar y Propiedades de la página Propiedades de la configuración activa actual.
También se puede elegir una configuración diferente, no actualmente activa, teniendo acceso al objeto ConfigurationManager.Para obtener más información, vea Cómo: Crear configuraciones de compilación de soluciones y proyectos.
Las propiedades de configuración de los proyectos de Visual C# se definen en CSharpProjectConfigurationProperties4.Las propiedades ErrorReport y LanguageVersion solo son específicas de los proyectos de Visual C#.Las demás propiedades de CSharpProjectConfigurationProperties3 son iguales a las propiedades de ProjectConfigurationProperties3.
A estas propiedades de configuración no se puede tener acceso al convertir directamente un objeto Property en un objeto CSharpProjectConfigurationProperties3 o ProjectConfigurationProperties3.En lugar de ello, para tener acceso a estas propiedades se puede pasar el nombre del elemento de configuración como una cadena, como se muestra a continuación:
EnvDTE.Project proj;
EnvDTE.Configuration config;
EnvDTE.Properties configProps;
EnvDTE.Property prop;
proj = DTE.Solution.Projects.Item(1);
config = proj.ConfigurationManager.ActiveConfiguration;
configProps = config.Properties;
prop = configProps.Item("EnableSQLServerDebugging")
Este código obtiene acceso a la propiedad CSharpProjectConfigurationProperties3.EnableSQLServerDebugging o ProjectConfigurationProperties3.EnableSQLServerDebugging, en función de si la variable proj define un proyecto de Visual C# o Visual Basic.
De hecho, las propiedades de configuración definidas en CSharpProjectConfigurationProperties3 o ProjectConfigurationProperties3 son una lista de referencia de las propiedades de configuración de proyectos específicos disponibles, a las que se puede tener acceso como elementos de propiedad de configuración de proyectos, mediante la colección Properties.
Los siguientes pasos explican cómo tener acceso mediante programación a las propiedades de configuración para la configuración actualmente activa, 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 Importar y exportar configuraciones en el menú Herramientas.Para obtener más información, vea Valores de configuración de Visual Studio.
Para tener acceso a las propiedades de configuración de un tipo específico de proyecto
Cree un proyecto de complemento de Visual Studio mediante Visual C# y seleccione la opción para cargar el complemento cuando se inicie Visual Studio.
En el menú Proyecto, haga clic en Agregar referencia, luego en la ficha .NET, seleccione System.Windows.Forms, VSLangProj, VSLangProj2 y VSLangProj80, 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 la siguiente llamada de función a la función OnConnection.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectConfigProperties(_applicationObject);
Agregue el método VSProjectConfigProperties inmediatamente después del método OnConnection.
public void VSProjectConfigProperties(DTE2 dte) { try { // Open a Visual C# or Visual Basic project // before running this add-in. Project project; Configuration config; Properties configProps; Property prop; project = _applicationObject.Solution.Projects.Item(1); config = project.ConfigurationManager.ActiveConfiguration; configProps = config.Properties; prop = configProps.Item("PlatformTarget"); MessageBox.Show("The platform target for this project is: " + prop.Value.ToString()); prop = configProps.Item("WarningLevel"); MessageBox.Show ("The warning level for this project is set to: " + prop.Value.ToString()); MessageBox.Show("Changing the warning level to 3..."); prop.Value = "3"; MessageBox.Show ("The warning level for this project is now set to: " + prop.Value.ToString()); if (project.Kind == PrjKind.prjKindCSharpProject) { MessageBox.Show("The project is a Visual C# Project"); prop = configProps.Item("LanguageVersion"); MessageBox.Show("The language version value is : " + prop.Value.ToString()); MessageBox.Show("Setting the language version to ISO-1"); prop.Value = "ISO-1"; MessageBox.Show("The language version value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
El método VSProjectConfigProperties obtiene y muestra el valor de propiedad PlatformTarget.Además, establece y obtiene la propiedad WarningLevel.Si el proyecto es de Visual C#, el método VSProjectConfigProperties también establece y obtiene la propiedad LanguageVersion.
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 nivel de advertencia ha cambiado, haga clic en Propiedades en el menú Proyecto y, a continuación, seleccione la pestaña Compilar en la ventana Propiedades.
El campo Nivel de advertencia refleja el cambio realizado mediante programación.
Para validar la configuración de la versión de lenguaje de un proyecto de Visual C#, en el panel Compilar de la ventana Propiedades, haga clic en Avanzadas.
El campo Versión de lenguaje del cuadro de diálogo Configuración de compilación avanzada refleja el cambio que el complemento realizó.
Ejemplo
En el siguiente ejemplo de complemento básico de Visual Studio, se muestra cómo tener acceso a las propiedades de un tipo de proyecto específico, utilizando la automatización de Visual Studio.
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;
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
VSProjectConfigProperties(_applicationObject);
}
public void VSProjectConfigProperties(DTE2 dte)
{
try
{
// Open a Visual C# or Visual Basic project
// before running this add-in.
Project project;
Configuration config;
Properties configProps;
Property prop;
project = _applicationObject.Solution.Projects.Item(1);
config = project.ConfigurationManager.ActiveConfiguration;
configProps = config.Properties;
prop = configProps.Item("PlatformTarget");
MessageBox.Show("The platform target for this project is:
" + prop.Value.ToString());
prop = configProps.Item("WarningLevel");
MessageBox.Show
("The warning level for this project is set to: "
+ prop.Value.ToString());
MessageBox.Show("Changing the warning level to 3...");
prop.Value = "3";
MessageBox.Show
("The warning level for this project is now set to: "
+ prop.Value.ToString());
if (project.Kind == PrjKind.prjKindCSharpProject)
{
MessageBox.Show("The project is a Visual C# Project");
prop = configProps.Item("LanguageVersion");
MessageBox.Show("The language version value is : "
+ prop.Value.ToString());
MessageBox.Show("Setting the language version to ISO-1");
prop.Value = "ISO-1";
MessageBox.Show("The language version 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 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)
VSProjectConfigProperties(_applicationObject)
End Sub
Sub VSProjectConfigProperties(ByVal dte As DTE2)
' Open a Visual C# or Visual Basic project
' before running this add-in.
Try
Dim project As Project
Dim config As Configuration
Dim configProps As Properties
Dim prop As [Property]
project = _applicationObject.Solution.Projects.Item(1)
config = project.ConfigurationManager.ActiveConfiguration
configProps = config.Properties
prop = configProps.Item("PlatformTarget")
MsgBox("The platform target for this project is: " _
& prop.Value.ToString())
prop = configProps.Item("WarningLevel")
MsgBox("The warning level for this project is set to: " _
& prop.Value.ToString())
MsgBox("Changing the warning level to 3...")
prop.Value = "3"
MsgBox("The warning level for this project is now set to: " _
& prop.Value.ToString())
If project.Kind = PrjKind.prjKindCSharpProject Then
MsgBox("The project is a Visual C# Project")
prop = configProps.Item("LanguageVersion")
MsgBox("The language version value is : " _
& prop.Value.ToString())
MsgBox("Setting the language version to ISO-1")
prop.Value = "ISO-1"
MsgBox("The language version 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.