Практическое руководство. Доступ к свойствам определенных типов проектов
Обновлен: Ноябрь 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.
Примечание. |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска среды. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить параметры, выберите пункт Импорт и экспорт параметров в меню Сервис. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Доступ к свойствам для определенного типа проекта
Создайте проект надстройки Visual Studio, используя Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET выберите VSLangProj, VSLangProj2 и VSLangProj80, и нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using VSLangProj; using VSLangProj2; using VSLangProj80;
Добавьте в метод OnConnection следующий вызов метода.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectProperties(_applicationObject);
Добавьте метод 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.
В разделе примера представлен полный код.
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C#, Visual J# или Visual Basic в интерфейсе IDE Visual Studio.
В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Убедитесь, что имя сборки изменилось, щелкнув пункт Свойства в меню Проект, и перейдите на вкладку Приложение в окне Свойства.
В поле Имя сборки отражается изменение, выполненное программным образом.
Пример
Ниже приведен пример простой надстройки 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, специфическим для типа проекта