Практическое руководство. Доступ к свойствам определенных типов проектов
Общая модель автоматизации Visual Studio предоставляет коллекцию Properties, которую можно использовать для доступа к коллекциям Properties любого типа проекта Visual Studio. Кроме того, при помощи свойств проекта можно управлять параметрами безопасности, именем сборки и так далее.
Чтобы вручную установить и проверить свойства проекта, откройте проект в интегрированной среде разработки Visual Studio. В меню Проект выберите пункт Свойства. В окне Свойства содержится несколько вкладок и в каждой области указаны свойства, при помощи которых можно определить поведение проектов и управлять ими. Модель автоматизации позволяет управлять этими параметрами программным образом. В частности, свойства в ProjectProperties3 позволяют управлять свойствами проекта, которые расположены в областях окон Приложение, Ресурсы, Параметры, Пути для ссылок и Подписывание на странице Свойства для проектов Visual C#. Свойства, определенные в VBProjectProperties3, позволяют управлять параметрами свойств проекта Visual Basic, которые расположены в областях окон Приложение, Ресурсы, Параметры, Ссылки и Подпись в окне Свойства.
Свойства для проектов Visual C# определяются в ProjectProperties3. Свойства для проектов Visual Basic определяются в VBProjectProperties3. Свойства MyApplication и MyType относятся только к проектам Visual Basic. Остальные свойства в VBProjectProperties3 соответствуют свойствам в ProjectProperties3.
Доступ к этим свойствам нельзя получить непосредственным приведением объекта Properties к объекту ProjectProperties3 или VBProjectProperties3. Доступ к свойствам можно получить через коллекцию Properties, указав имя свойства для определенного типа проекта в виде строки для обозначения Property. Например, код EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); позволяет получить доступ к свойству ApplicationIcon.
Фактически свойства, определенные в ProjectProperties3 и VBProjectProperties3, представляют собой список ссылок на доступные свойства для определенных проектов, с которыми можно обращаться как с элементами свойств проекта.
В следующих шагах подробно описан порядок программного доступа к этим свойствам в надстройке Visual Studio.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.
Доступ к свойствам для определенного типа проекта
Создайте проект надстройки Visual Studio, используя Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET, выберите VSLangProj, VSLangProj2, VSLangProj80 и Sytem.Windows.Forms, затем нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
Добавьте вызов нового метода VSProjectProperies в метод OnConnection после строки, задающей метод _addInstance, как показано ниже.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
Добавьте метод VSProjectProperties сразу после метода OnConnection.
public void VSProjectProperties(DTE2 dte) { try { // Open a Visual C# or Visual Basic project // before running this add-in. Project project; project = _applicationObject.Solution.Projects.Item(1); Property prop; prop = project.Properties.Item("AssemblyName"); MessageBox.Show("The assembly name is: " + prop.Value .ToString()); prop.Value = "MyTestAssembly"; MessageBox.Show("The assembly name is now: " + prop.Value.ToString()); // If the project is a Visual Basic project, set // the MyApplication property. if (project.Kind == "{F184B08F-C81C-45F6-A5F6-5ABD9991F28F}") { MessageBox.Show("The project is a Visual Basic Project"); prop = project.Properties.Item("MyType"); MessageBox.Show("The MyType value is: " + prop.Value.ToString()); prop.Value = "Class Library"; MessageBox.Show("The MyType value is now: " + prop.Value.ToString()); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
Метод VSProjectProperties задает и получает свойство AssemblyName, подставляя его в виде строки элемента Property в коллекцию Properties. Если проект является проектом Visual Basic, метод VSProjectProperties также задает и возвращает свойство MyType.
В разделе примера представлен полный код.
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C# или Visual Basic в интегрированной среде разработки Visual Studio.
В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Убедитесь, что имя сборки изменилось, щелкнув пункт Свойства в меню Проект, и перейдите на вкладку Приложение в окне Свойства.
В поле Имя сборки отражается изменение, выполненное программным образом.
Пример
Ниже приведен пример простой надстройки Visual Studio, которая демонстрирует доступ к свойствам, специфическим для типов проектов, при помощи автоматизации в Visual Studio.
using System;
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;
namespace myAddin
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
VSProjectProperties(_applicationObject);
}
public void VSProjectProperties(DTE2 dte)
{
try
{
// Open a Visual C# or Visual Basic project
// before running this add-in.
Project project;
project = _applicationObject.Solution.Projects.Item(1);
Property prop;
prop = project.Properties.Item("AssemblyName");
MessageBox.Show("The assembly name is: "
+ prop.Value .ToString());
prop.Value = "MyTestAssembly";
MessageBox.Show("The assembly name is now: "
+ prop.Value.ToString());
// If the project is a Visual Basic project, set
// the MyApplication property.
if (project.Kind == PrjKind.prjKindVBProject)
{
MessageBox.Show
("The project is a Visual Basic Project");
prop = project.Properties.Item("MyType");
MessageBox.Show("The MyType value is: "
+ prop.Value.ToString());
prop.Value = "Class Library";
MessageBox.Show("The MyType 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 EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
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)
VSProjectProperties(_applicationObject)
End Sub
Sub VSProjectProperties(ByVal dte As DTE2)
' Open a Visual C# or Visual Basic project
' before running this add-in.
Try
Dim project As Project
project = _applicationObject.Solution.Projects.Item(1)
Dim prop As [Property]
prop = project.Properties.Item("AssemblyName")
MsgBox("The assembly name is: " _
& prop.Value.ToString())
prop.Value = "MyTestAssembly"
MsgBox("The assembly name is now: " _
& prop.Value.ToString())
' If the project is a Visual Basic project, set
' the MyApplication property.
If project.Kind = PrjKind.prjKindVBProject Then
MsgBox("The project is a Visual Basic Project")
prop = project.Properties.Item("MyType")
MsgBox("The MyType value is: " _
& prop.Value.ToString())
prop.Value = "Class Library"
MsgBox("The MyType 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, специфическим для типа проекта