Практическое руководство. Доступ к свойствам определенных типов проектов

Обновлен: Ноябрь 2007

Общая модель автоматизации Visual Studio предоставляет коллекцию Properties, которую можно использовать для доступа к коллекциям Properties любого типа проекта Visual Studio. Кроме того, при помощи свойств проекта можно управлять параметрами безопасности, именем сборки и так далее.

Чтобы вручную установить и проверить свойства проекта, откройте проект в интегрированной среде разработки Visual Studio. В меню Проект выберите пункт Свойства. В окне Свойства содержится несколько вкладок и в каждой области указаны свойства, при помощи которых можно определить поведение проектов и управлять ими. Модель автоматизации позволяет управлять этими параметрами программным образом. В частности, свойства в области ProjectProperties3 позволяют управлять параметрами проекта, которые расположены в областях окон Приложение, Ресурсы, Параметры, Пути для ссылок и Подпись на странице Свойства для проектов Visual C# и Visual J#. Свойства, определенные в VBProjectProperties3, позволяют управлять параметрами свойств проекта Visual Basic, которые расположены в областях окон Приложение, Ресурсы, Параметры, Ссылки и Подпись в окне Свойства.

Свойства для проектов Visual C# и Visual J# определяются в 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.

ms228952.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска среды. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить параметры, выберите пункт Импорт и экспорт параметров в меню Сервис. Дополнительные сведения см. в разделе Параметры Visual Studio.

Доступ к свойствам для определенного типа проекта

  1. Создайте проект надстройки Visual Studio, используя Visual C#.

  2. В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET выберите VSLangProj, VSLangProj2 и VSLangProj80, и нажмите кнопку ОК.

  3. Добавьте в начало файла Connect.cs следующие операторы using.

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    
  4. Добавьте в метод OnConnection следующий вызов метода.

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectProperties(_applicationObject);
    
  5. Добавьте метод VSProjectProperties сразу после метода OnConnection.

    public void VSProjectProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C#, Visual J#, 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);
        }
    }
    

    Метод VSProjectProperties задает и возвращает свойство AssemblyName, подставляя его в виде строки элемента Property в коллекцию Properties. Если проект является проектом Visual Basic, метод VSProjectProperties также задает и возвращает свойство MyType.

    В разделе примера представлен полный код.

  6. Чтобы построить надстройку, в меню Построение щелкните Построить решение.

  7. Откройте проект Visual C#, Visual J# или Visual Basic в интерфейсе IDE Visual Studio.

  8. В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.

  9. Убедитесь, что имя сборки изменилось, щелкнув пункт Свойства в меню Проект, и перейдите на вкладку Приложение в окне Свойства.

    В поле Имя сборки отражается изменение, выполненное программным образом.

Пример

Ниже приведен пример простой надстройки Visual Studio, которая демонстрирует доступ к свойствам, специфическим для типов проектов, при помощи автоматизации в Visual Studio.

using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
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#, Visual J#, 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 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)
        VSProjectProperties(_applicationObject)
    End Sub
    Sub VSProjectProperties(ByVal dte As DTE2)
        ' Open a Visual C#, Visual J#, 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, специфическим для типа проекта