Comment : accéder aux propriétés de configuration de types de projets spécifiques
Le modèle Automation général de Visual Studio fournit la collection Properties qui peut être utilisée pour accéder aux collections Properties de tout type de projet Visual Studio. Entre autres choses, les propriétés de projet vous permettent de contrôler des paramètres de sécurité, la configuration de build et la configuration de débogage.
Pour définir et examiner manuellement des propriétés de projet, ouvrez un projet dans l'environnement de développement intégré (IDE) de Visual Studio. Dans le menu Projet, cliquez sur Propriétés. La fenêtre Propriétés présente plusieurs onglets et chaque volet répertorie les propriétés utilisées pour définir et contrôler le comportement de projets. Le modèle Automation vous permet de contrôler ces paramètres par programmation. Plus spécifiquement, les propriétés répertoriées dans CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4 et ProjectConfigurationProperties3 vous permettent de contrôler les propriétés de projet présentes dans les volets Générer (Compiler pour les projets Visual Basic) et Propriétés de débogage de la page Propriétés de la configuration active.
Vous pouvez également choisir une configuration différente, autre que celle actuellement active, en accédant à l'objet ConfigurationManager. Pour plus d'informations, consultez Comment : créer des configurations de génération de solution et de projet.
Les propriétés de configuration des projets Visual C# sont définies dans CSharpProjectConfigurationProperties4. Les propriétés ErrorReport et LanguageVersion sont spécifiques aux projets Visual C#. Les autres propriétés présentes dans CSharpProjectConfigurationProperties3 sont identiques aux propriétés présentes dans ProjectConfigurationProperties3.
Ces propriétés de configuration sont inaccessibles par le cast direct d'un objet Property à un objet CSharpProjectConfigurationProperties3 ou ProjectConfigurationProperties3. Au lieu de cela, vous pouvez accéder à ces propriétés en passant le nom de l'élément de configuration sous forme de chaîne, comme indiqué ci-dessous :
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")
Ce code permet d'accéder à la propriété CSharpProjectConfigurationProperties3.EnableSQLServerDebugging ou ProjectConfigurationProperties3.EnableSQLServerDebugging selon que la variable proj définit un projet Visual C# ou Visual Basic.
En effet, les propriétés de configuration définies dans CSharpProjectConfigurationProperties3 ou ProjectConfigurationProperties3 constituent une liste de références des propriétés de configuration disponibles pour certains projets accessibles en tant qu'éléments de propriété de configuration de projet, par le biais de la collection Properties.
Les étapes ci-dessous détaillent la manière d'accéder par programmation à ces propriétés de configuration de la configuration actuellement active dans un complément Visual Studio.
Notes
Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Ces procédures ont été développées avec les paramètres de développement généraux actifs. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Utilisation des paramètres.
Pour accéder aux propriétés de configuration pour un type de projet spécifique
Créez un projet de complément Visual Studio à l'aide de Visual C#, en sélectionnant l'option de chargement du complément au démarrage de Visual Studio.
Dans le menu Projet, cliquez sur Ajouter une référence, puis sur l'onglet .NET. Ensuite, sélectionnez System.Windows.Forms, VSLangProj, VSLangProj2 et VSLangProj80, puis cliquez sur OK.
Ajoutez les instructions d'utilisation suivantes au début du fichier Connect.cs :
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
Ajoutez l'appel de fonction suivant à la fonction OnConnection.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectConfigProperties(_applicationObject);
Ajoutez la méthode VSProjectConfigProperties directement sous la méthode 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); } }
La méthode VSProjectConfigProperties obtient et affiche la valeur de propriété PlatformTarget. Celle-ci définit et obtient la propriété WarningLevel. Si le projet est un projet Visual C#, la méthode VSProjectConfigProperties définit et obtient la propriété LanguageVersion.
Générez le complément en cliquant sur Générer la solution dans le menu Générer.
Ouvrez un projet Visual C# ou Visual Basic dans l'IDE Visual Studio.
Dans le menu Outils, cliquez sur Gestionnaire de compléments, puis sélectionnez votre complément dans la boîte de dialogue Gestionnaire de compléments. Cliquez sur OK pour exécuter votre complément.
Validez les modifications apportées au niveau d'avertissement en cliquant sur Propriétés dans le menu Projet, puis sélectionnez l'onglet Générer dans la fenêtre Propriétés.
Le champ Niveau d'avertissement reflète la modification apportée par programmation.
Pour valider le paramètre de version de langage pour un projet Visual C#, dans le volet Générer de la fenêtre Propriétés, cliquez sur Avancé.
Le champ Version du langage de la boîte de dialogue Paramètres de génération avancés reflète la modification que votre complément a apportée.
Exemple
L'exemple suivant est un complément Visual Studio de base qui montre comment accéder à des propriétés destinées à un type de projet spécifique à l'aide de l'automation dans 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
Compilation du code
Pour compiler ce code, créez un projet de complément Visual Studio et remplacez le code de la méthode OnConnection par celui de l'exemple. Pour plus d'informations sur l'exécution d'un complément, consultez Comment : contrôler des compléments avec le Gestionnaire de compléments.