Практическое руководство. Доступ к свойствам конфигурации определенных типов проектов
Обновлен: Ноябрь 2007
Общая модель автоматизации Visual Studio предоставляет коллекцию Properties, которую можно использовать для доступа к коллекциям Properties любого типа проекта Visual Studio. Кроме того, при помощи свойств проекта можно управлять параметрами безопасности, конфигурацией построения и отладки.
Чтобы вручную установить и проверить свойства проекта, откройте проект в интегрированной среде разработки Visual Studio. В меню Проект выберите пункт Свойства. В окне Свойства содержится несколько вкладок и в каждой области указаны свойства, при помощи которых можно определить поведение проектов и управлять ими. Модель автоматизации позволяет управлять этими параметрами программным образом. В частности свойства в областях CSharpProjectConfigurationProperties4, VBProjectConfigurationProperties4, JSharpProjectConfigurationProperties3 и ProjectConfigurationProperties3 позволяют управлять свойствами проекта, расположенными в областях окон Построение (для проектов Visual Basic – Компиляция) и Отладка на странице Свойства активной конфигурации.
Можно также выбрать другую, не активную конфигурацию через объект ConfigurationManager. Дополнительные сведения см. в разделе Практическое руководство. Создание конфигураций построения решения и проекта.
Свойства конфигурации для проектовVisual C# и Visual J# определяются в CSharpProjectConfigurationProperties4 и JSharpProjectConfigurationProperties3 соответственно. Свойства CodePage, DisableLangXtns, JCPA и SecureScoping относятся только к проектам Visual J#. Свойства ErrorReport и LanguageVersion относятся только к проектам Visual C#. Остальные свойства в CSharpProjectConfigurationProperties3 и JSharpProjectConfigurationProperties3 соответствуют свойства в ProjectConfigurationProperties3.
Свойства конфигурации недоступны по непосредственному приведению объекта Property к объекту CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 или ProjectConfigurationProperties3. Чтобы получить доступ к свойствам, необходимо указать имя элемента конфигурации в виде строки (см. ниже):
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")
Этот код обращается к свойству CSharpProjectConfigurationProperties3.EnableSQLServerDebugging, JSharpProjectConfigurationProperties3.EnableSQLServerDebugging или ProjectConfigurationProperties3.EnableSQLServerDebugging в зависимости от того, какой проект определяет переменная proj – Visual C#, Visual J# или Visual Basic.
Фактически, свойства конфигурации, определенные в CSharpProjectConfigurationProperties3, JSharpProjectConfigurationProperties3 или ProjectConfigurationProperties3, представляют собой список доступных свойств конфигурации для определенных проектов, с которыми можно обращаться как с элементами свойств конфигурации через коллекцию Properties.
В следующих шагах подробно описан порядок программного доступа к свойствам конфигурации в активной конфигурации в надстройке Visual Studio.
![]() |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска среды. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить параметры, выберите пункт Импорт и экспорт параметров в меню Сервис. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Доступ к свойствам конфигурации для определенного типа проекта
Создайте проект надстройки Visual Studio, используя Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET выберите System.Windows.Forms, VSLangProj, VSLangProj2 и VSLangProj80, а затем нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using System.Windows.Forms;
Добавьте в функцию OnConnection следующий вызов функции.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectConfigProperties(_applicationObject);
Добавьте метод VSProjectConfigProperties сразу после метода 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); } }
Метод VSProjectConfigProperties возвращает и отображает значение свойства PlatformTarget. Он также возвращает или задает свойство WarningLevel. Если проект является проектом Visual C#, метод VSProjectConfigProperties задает и возвращает свойство LanguageVersion. Если проект является проектом Visual J#, метод задает и возвращает свойство CodePage.
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C#, Visual J# или Visual Basic в интерфейсе IDE Visual Studio.
В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Убедитесь, что порог предупреждений изменился, щелкнув пункт Свойства в меню Проект, и перейдите на вкладку Построение в окне Свойства.
В поле Порог предупреждений отражается изменение, выполненное программным образом.
Чтобы проверить параметр версии языка для проекта Visual C#, в области Построение окна Свойства щелкните Дополнительно.
В поле Версия языка диалогового окна Дополнительные параметры построения отражается изменение, внесенное надстройкой.
Чтобы проверить изменение параметра кодовой страницы проекта Visual J#, в области Построение окна Свойства щелкните Дополнительно.
В поле Кодовая страница диалогового окна Дополнительные параметры построения отражается изменение этого свойства.
Пример
Ниже приведен пример простой надстройки Visual Studio, которая демонстрирует доступ к свойствам определенного типа проекта при помощи автоматизации в 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
Компиляция кода
Для компиляции кода создайте новый проект надстройки Visual Studio и замените код метода OnConnection кодом из данного примера. Сведения о запуске надстройки см. в разделе Практическое руководство. Управление надстройками с помощью диспетчера надстроек.
См. также
Основные понятия
Другие ресурсы
Доступ к свойствам Project, Project Item и Configuration, специфическим для типа проекта