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

更新:2007 年 11 月

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

若要以手動方式設定及檢視專案屬性,請在 Visual Studio 整合式開發環境 (IDE) 中開啟專案。在 [專案] 功能表上,按一下 [屬性]。[屬性] 視窗中有多個索引標籤,而且每個窗格都會列出用來定義及控制專案行為的屬性。Automation 模型可以讓您以程式設計方式控制這些設定。特別是,ProjectProperties3 中的屬性可以讓您控制在 [屬性] 頁的 [應用程式]、[資源]、[設定]、[參考路徑] 和 [簽署] 視窗窗格中所找到之 Visual C# 和 Visual J# 專案的專案屬性。在 VBProjectProperties3 中定義的屬性,則可以讓您控制在 [屬性] 頁的 [應用程式]、[資源]、[設定]、[參考] 和 [簽署] 視窗窗格中所找到之 Visual Basic 專案的屬性設定。

Visual C# 和 Visual J# 專案的屬性是在 ProjectProperties3 中定義,Visual Basic 專案的屬性則是在 VBProjectProperties3 中定義。MyApplicationMyType 屬性只適用於 Visual Basic 專案,VBProjectProperties3 中的其他屬性和 ProjectProperties3 中的屬性都相同。

這些屬性無法以直接將 Properties 物件轉換為 ProjectProperties3VBProjectProperties3 物件的方式存取,而是必須透過 Properties 集合,提供特定專案類型的屬性名稱當做字串 (String) 來指定 Property,才能存取這些屬性。例如,EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); 這行程式碼可以讓您存取 ApplicationIcon 屬性。

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

在下列步驟中,會詳細說明如何在 Visual Studio 增益集 (Add-In) 中以程式設計方式存取這些屬性。

注意事項:

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

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

  1. 使用 Visual C# 建立 Visual Studio 增益集專案。

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

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

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    
  4. 將下列方法呼叫加入至 OnConnection 方法。

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectProperties(_applicationObject);
    
  5. 緊接在 OnConnection 方法的下面加入 VSProjectProperties 方法。

    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 屬性。

    範例部分會列出完整的程式碼。

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

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

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

  9. 按一下 [專案] 功能表上的 [屬性],然後在 [屬性] 視窗中選取 [應用程式] 索引標籤,確認組件名稱已變更。

    [組件名稱] 欄位會反映出您以程式設計方式所做的變更。

範例

下列是基本 Visual Studio 增益集的範例,在此範例中會示範如何在 Visual Studio 中使用 Automation 存取特定專案類型的屬性。

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 方法的程式碼。如需如何執行增益集的詳細資訊,請參閱 HOW TO:以增益集管理員控制增益集

請參閱

概念

專案屬性

其他資源

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