Cómo: Obtener acceso a las propiedades de configuración de tipos específicos de proyectos
Actualización: noviembre 2007
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 generació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. Específicamente, las propiedades que aparecen en CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4, JSharpProjectConfigurationProperties3 y ProjectConfigurationProperties3 permiten controlar las propiedades del proyecto que se encuentran en los paneles de la ventana Generar (Compilar en proyectos de Visual Basic) y Propiedades dedepuración de la página Propiedades de la configuración actualmente activa.
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# y Visual J# están definidas en CSharpProjectConfigurationProperties4 y JSharpProjectConfigurationProperties3, respectivamente. Las propiedades CodePage, DisableLangXtns, JCPA y SecureScoping sólo son específicas de los proyectos de Visual J#. Las propiedades ErrorReport y LanguageVersion sólo son específicas de los proyectos de Visual C#. Las demás propiedades de CSharpProjectConfigurationProperties3 y JSharpProjectConfigurationProperties3 son iguales a las propiedades de ProjectConfigurationProperties3.
A estas propiedades de configuración no se puede tener acceso convirtiendo directamente un objeto Property en un objeto CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 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 tiene acceso a la propiedad CSharpProjectConfigurationProperties3.EnableSQLServerDebugging, JSharpProjectConfigurationProperties3.EnableSQLServerDebugging o ProjectConfigurationProperties3.EnableSQLServerDebugging, dependiendo de si la variable proj define un proyecto de Visual C#, Visual J# o Visual Basic.
De hecho, las propiedades de configuración definidas en CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 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 desarrollaron con la Configuración general de desarrollo activa. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del 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#.
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 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#, Visual J#, 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()); } if (project.Kind == PrjKind2.prjKindVJSharpProject) { MessageBox.Show("The project is a Visual J# Project"); prop = configProps.Item("CodePage"); MessageBox.Show("The code page value is : " + prop.Value.ToString()); MessageBox.Show ("Setting the code page value to my code page"); prop.Value = "my code page"; MessageBox.Show("The code page value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
El método VSProjectConfigProperties obtiene y muestra el valor de la 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. Si el proyecto es de Visual J#, el método establece y obtiene la propiedad CodePage.
Haga clic en Generar solución en el menú Generar para generar el complemento.
Abra un proyecto de Visual C#, Visual J# 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 ficha Generar 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 Generar de la ventana Propiedades, haga clic en Avanzadas.
El campo Versión de lenguaje del cuadro de diálogo Configuración de generación avanzada refleja el cambio que el complemento realizó.
Para validar el cambio a la configuración de la página de códigos de un proyecto de Visual J#, en el panel Generar de la ventana Propiedades, haga clic en Avanzadas.
El campo Página de códigos del cuadro de diálogo Configuración de generación avanzada refleja el cambio a esta propiedad.
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 System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
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#, Visual J#, 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());
}
if (project.Kind == PrjKind2.prjKindVJSharpProject)
{
MessageBox.Show("The project is a Visual J# Project");
prop = configProps.Item("CodePage");
MessageBox.Show("The code page value is : "
+ prop.Value.ToString());
MessageBox.Show
("Setting the code page value to my code page");
prop.Value = "my code page";
MessageBox.Show("The code page 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
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#, Visual J#, 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
If project.Kind = PrjKind2.prjKindVJSharpProject Then
MsgBox("The project is a Visual J# Project")
prop = configProps.Item("CodePage")
MsgBox("The code page value is : " _
& prop.Value.ToString())
MsgBox("Setting the code page value to my code page")
prop.Value = "my code page"
MsgBox("The code page 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.