如何:访问特定项目类型的属性
Visual Studio 常规自动化模型提供 Properties 集合,可使用它访问任何 Visual Studio 项目类型的 Properties 集合。 除此以外,项目属性还使您能够控制安全设置、程序集名称等。
若要手动设置和检查项目属性,请在 Visual Studio 集成开发环境 (IDE) 中打开一个项目。 在**“项目”菜单上,单击“属性”**。 **“属性”**窗口有多个选项卡,并且每个窗格均列出了用于定义和控制项目行为的属性。 自动化模型允许您以编程方式控制这些设置。 具体而言,利用 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 Studio 版本以及使用的设置决定了这些元素。有关详细信息,请参阅 在 Visual Studio 中自定义开发设置。
访问特定项目类型的属性
使用 Visual C# 创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,单击“.NET”选项卡,选择“VSLangProj”、“VSLangProj2”和“VSLangProj80”,再选择“Sytem.Windows.Forms”,并单击“确定”**。
将以下 using 语句添加到 Connect.cs 文件顶部。
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
在设置 _addInstance 方法的行后,向 OnConnection 方法中添加一个对名为 VSProjectProperies 的新方法的调用,如下所示:
_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 Studio IDE 中打开一个 Visual C# 或 Visual Basic 项目。
在**“工具”菜单上,单击“外接程序管理器”,并从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
单击**“项目”菜单上的“属性”,然后在“属性”窗口中选择“应用程序”**选项卡,验证程序集名称是否已被更改。
**“程序集名称”**字段反映了您以编程方式所做的更改。
示例
下面的示例是一个简单的 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 方法的代码。 有关如何运行外接程序的信息,请参见如何:使用外接程序管理器控制外接程序。