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