HOW TO:存取特定專案類型的組態屬性
Visual Studio 的一般 Automation 模型會提供 Properties 集合,這個集合可以用來存取任何 Visual Studio 專案類型的 Properties 集合。專案屬性的其中一項功能是可以讓您控制安全性設定、組建組態和偵錯組態。
若要以手動方式設定及檢視專案屬性,請在 Visual Studio 整合式開發環境 (IDE) 中開啟專案。在 [專案] 功能表上,按一下 [屬性]。[屬性] 視窗中有多個索引標籤,而且每個窗格都會列出用來定義及控制專案行為的屬性。Automation 模型可以讓您以程式設計方式控制這些設定。特別是列在 CSharpProjectConfigurationProperties4、VBProjectConfigurationProperties4 和 ProjectConfigurationProperties3 中的屬性,可以讓您控制在目前使用中組態之 [屬性] 頁的 [建置] (如果是 Visual Basic 專案,則是 [編譯]) 和 [偵錯] 屬性視窗窗格中找到的專案屬性。
您也可以存取 ConfigurationManager 物件,選擇非目前使用中的其他組態。如需詳細資訊,請參閱 HOW TO:建立方案和專案組建組態。
Visual C# 專案的組態屬性是在 CSharpProjectConfigurationProperties4 中定義。ErrorReport 和 LanguageVersion 屬性只適用於 Visual C# 專案,CSharpProjectConfigurationProperties3 中的其他屬性和 ProjectConfigurationProperties3 中的屬性都相同。
這些組態屬性無法以直接將 Property 物件轉換為 CSharpProjectConfigurationProperties3 或 ProjectConfigurationProperties3 物件的方式存取,但是,您可以依照下列程式碼所示,將組態項目的名稱當做字串 (String) 傳遞來存取這些屬性:
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")
這個程式碼會根據 proj 變數定義的是 Visual C# 或 Visual Basic 專案,來判斷要存取 CSharpProjectConfigurationProperties3.EnableSQLServerDebugging 或 ProjectConfigurationProperties3.EnableSQLServerDebugging 屬性。
實際上,在 CSharpProjectConfigurationProperties3 或 ProjectConfigurationProperties3 中定義的組態屬性可以當做一份參考清單,裡面包含了特定專案中可以透過 Properties 集合當做專案組態屬性項目存取之所有可使用的組態屬性。
在下列步驟中,會詳細說明如何在 Visual Studio 增益集 (Add-In) 中以程式設計方式存取目前使用中組態的組態屬性。
注意事項 |
---|
根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定。 |
若要存取特定專案類型的組態屬性
使用 Visual C# 並選取當 Visual Studio 啟動時載入增益集的選項,進而建立 Visual Studio 增益集專案。
在 [專案] 功能表上按一下 [加入參考],再按一下 [.NET] 索引標籤,選取 [System.Windows.Forms]、[VSLangProj]、[VSLangProj2] 和 [VSLangProj80],然後再按 [確定]。
將下列 using 陳述式 (Statement) 加入至 Connect.cs 檔案的最上方。
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90; using VSLangProj100; using System.Windows.Forms;
將下列函式呼叫 (Function Call) 加入至 OnConnection 函式。
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; VSProjectConfigProperties(_applicationObject);
緊接在 OnConnection 方法的下面加入 VSProjectConfigProperties 方法。
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 中使用 Automation 存取特定專案類型的屬性。
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 方法的程式碼。如需如何執行增益集的詳細資訊,請參閱 HOW TO:使用增益集管理員來控制增益集。