共用方式為


HOW TO:存取特定專案類型的組態屬性

Visual Studio 的一般 Automation 模型會提供 Properties 集合,這個集合可以用來存取任何 Visual Studio 專案類型的 Properties 集合。 專案屬性的其中一項功能是可以讓您控制安全性設定、組建組態和偵錯組態。

若要以手動方式設定及檢視專案屬性,請在 Visual Studio 整合式開發環境 (IDE) 中開啟專案。 在 [專案] 功能表上,按一下 [屬性]。 [屬性] 視窗中有多個索引標籤,而且每個窗格都會列出用來定義及控制專案行為的屬性。 Automation 模型可以讓您以程式設計方式控制這些設定。 特別是列在 CSharpProjectConfigurationProperties4VBProjectConfigurationProperties4ProjectConfigurationProperties3 中的屬性,可以讓您控制在目前使用中組態之 [屬性] 頁的 [建置] (如果是 Visual Basic 專案,則是 [編譯]) 和 [偵錯] 屬性視窗窗格中找到的專案屬性。

您也可以存取 ConfigurationManager 物件,選擇非目前使用中的其他組態。 如需詳細資訊,請參閱 HOW TO:建立方案和專案組建組態

Visual C# 專案的組態屬性是在 CSharpProjectConfigurationProperties4 中定義。 ErrorReportLanguageVersion 屬性只適用於 Visual C# 專案, CSharpProjectConfigurationProperties3 中的其他屬性和 ProjectConfigurationProperties3 中的屬性都相同。

這些組態屬性無法以直接將 Property 物件轉換為 CSharpProjectConfigurationProperties3ProjectConfigurationProperties3 物件的方式存取, 但是,您可以依照下列程式碼所示,將組態項目的名稱當做字串 (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.EnableSQLServerDebuggingProjectConfigurationProperties3.EnableSQLServerDebugging 屬性。

實際上,在 CSharpProjectConfigurationProperties3ProjectConfigurationProperties3 中定義的組態屬性可以當做一份參考清單,裡面包含了特定專案中可以透過 Properties 集合當做專案組態屬性項目存取之所有可使用的組態屬性。

在下列步驟中,會詳細說明如何在 Visual Studio 增益集 (Add-In) 中以程式設計方式存取目前使用中組態的組態屬性。

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定

若要存取特定專案類型的組態屬性

  1. 使用 Visual C# 並選取當 Visual Studio 啟動時載入增益集的選項,進而建立 Visual Studio 增益集專案。

  2. 在 [專案] 功能表上按一下 [加入參考],再按一下 [.NET] 索引標籤,選取 [System.Windows.Forms]、[VSLangProj]、[VSLangProj2] 和 [VSLangProj80],然後再按 [確定]。

  3. 將下列 using 陳述式 (Statement) 加入至 Connect.cs 檔案的最上方。

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    using VSLangProj90;
    using VSLangProj100;
    using System.Windows.Forms;
    
  4. 將下列函式呼叫 (Function Call) 加入至 OnConnection 函式。

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectConfigProperties(_applicationObject);
    
  5. 緊接在 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 屬性,

  6. 按一下 [建置] 功能表上的 [建置方案],建置增益集。

  7. 在 Visual Studio IDE 中,開啟 Visual C# 或 Visual Basic 專案。

  8. 按一下 [工具] 功能表上的 [增益集管理員],然後從 [增益集管理員] 對話方塊中選取增益集。 按一下 [確定],執行您的增益集。

  9. 按一下 [專案] 功能表上的 [屬性],然後在 [屬性] 視窗中選取 [建置] 索引標籤,確認警告層級已變更。

    [警告層級] 欄位會反映出您以程式設計方式所做的變更。

  10. 若要驗證 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:使用增益集管理員來控制增益集

請參閱

其他資源

Project Properties

存取專案類型特定專案、專案項目和組態屬性