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