Share via


專案擴充性簡介

更新:2007 年 11 月

只要在任何專案中加入下列 VSLangProj 組件的參考,就可以使用物件模型 (Object Model):VSLangProj.dll、VSLangProj2.dll、VSLangProj80.dll 和 VSLangProj90.dll 組件。如需詳細資訊,請參閱 HOW TO:在 Visual Studio 中新增或移除參考 (Visual Basic)。這表示物件模型可使用於巨集、增益集和任何需要擴充 IDE 或自動化 IDE 的專案中。巨集是在巨集整合式開發環境中以 Visual Basic 所撰寫的。各主題中的範例都是用 Visual Basic 和 Visual C# 語言撰寫的。如需如何執行範例的詳細資訊,請參閱 HOW TO:編譯和執行 Automation 物件模型程式碼範例。增益集 (Add-In) 可以用任何一種 Visual Studio 裝載的語言撰寫,例如 Visual Basic、Visual C#、Visual C++ 和 Visual J#。VSLangProjVSLangProj2VSLangProj80VslangProj90 成員的參考主題包含以上各種語言的語法。如需 Automation 專案類型和 Automation 功能的描述資訊,請參閱建立增益集和精靈

VSLangProj、VSLangProj2、VSLangProj80 和 VSLangProj90 命名空間

這些命名空間包含 Visual Basic、Visual C# 和 Visual J# 專案的所有類別、介面和列舉型別 (Enumeration)。如需命名空間中所有物件的完整清單,請參閱 Visual Basic 和 Visual C# 的專案擴充性物件模型

使用 VSLangProj 組件和 EnvDTE 組件時可能發生的錯誤

如果建立的專案要參考一個或多個 VSLangProj 組件和 EnvDTE 組件,在執行階段可能偶爾會收到下列錯誤訊息:

「未處理的例外狀況: System.IO.FileNotFoundException: 載入檔案 'EnvDTE, Version=7.0.3300.0 時發生錯誤」

這個錯誤是由於執行階段型別解析衝突所引起。換句話說,Visual Studio 2005 中所附的 EnvDTE 組件是 8.0.xx 版,但是專案的組態參考卻要尋找此組件的舊版,也就是 7.0.xx 版。若要修正這個問題,必須在專案的組態 (.config) 檔中加入新版 EnvDTE 組件的繫結重新導向。這麼做才能讓 Visual Studio 載入新版的 EnvDTE 組件,而且不再發生錯誤。

若要這麼做,請在專案中加入「應用程式組態檔」,然後以下列程式碼取代其內容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-
        com:asm.v1" appliesTo="v2.0.50318">
            <dependentAssembly>
                <assemblyIdentity name="EnvDTE" publicKeyToken=
                "b03f5f7f11d50a3a"/>
                <bindingRedirect oldVersion="7.0.3300.0" 
                newVersion="8.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

VSProject2 物件

這個物件可以用來存取擴充性模型中的其他物件。DTE 物件是 Visual Studio Automation 模型中的最上層物件。在一般擴充性模型中,專案是以泛型 Project 物件表示。Project 物件具有 Object 屬性。屬性的型別則是在執行階段時依專案語言而決定。在 Visual Basic、Visual C# 或 Visual J# 專案中,Object 屬性會傳回 VSProject2 型別的物件。由於 Object 屬性的型別為 Object,所以您必須將參考轉換為 VSProject2 型別。在巨集中,如果第一個專案是 Visual Basic 專案,則型別轉換的程式碼應該像這樣:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;

有了 VSProject2 項目的參考之後,便可以管理專案的屬性、組態、檔案、資料夾、Imports 陳述式和參考。

如需詳細資訊,請參閱 VSProject2 物件簡介

References 和 Reference 物件

包含在 VSProject2 物件中的 References 屬性會存放 Reference3 物件的集合。Reference3 物件表示專案參考,主要是支援 Remove 方法的唯讀物件。References 物件可以支援加入參考 (COM、.NET 組件、ActiveX 和其他專案) 以及引發事件 (加入、移除和變更參考)。

References 物件不包含專案的 Web 參考。專案的 Web 參考可經由存取 WebReferencesFolder 屬性的 ProjectItems 屬性來擷取。

如需詳細資訊和程式碼範例,請參閱 ReferenceReference3 物件、References 集合、References 屬性和 WebReferencesFolder 屬性。

Imports 物件

包含在 VSProject2 物件中的 Imports 屬性會保留適用於整個 Visual Basic 專案之 Imports 陳述式的集合。如果將 Imports 陳述式加入至此集合,就不需要將對應的 Imports 陳述式 (例如 Imports VSLangProj) 加入至程式碼檔。這個物件支援加入及移除 Imports 陳述式,並依加入和移除陳述式而引發事件。在 Visual C# 專案中沒有對等的項目,因此,如果將 VSProject2.Imports 屬性套用至 Visual C# 專案,將會傳回 Nothing 或 null。如需詳細資訊,請參閱 Imports

VSProjectItem 和 BuildManager 物件

VSProjectItem 物件是指專案項目,相對於 VSProject2 物件所指的專案。在一般擴充性模型中,泛型 ProjectItem 物件表示專案項目。Object 屬性的型別為 Object,而在 Visual Basic 或 Visual C# 專案中,這個屬性的型別則為 VSProjectItem。在巨集中將物件轉換為 VSProjectItem 型別的程式碼應該像這樣:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
    Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;

VSProjectItem 物件包含連結至父代 (Parent) 專案項目和專案的屬性,以及強迫在該項目上執行自訂工具的方法。BuildManager 物件會處理自訂工具輸出。如需詳細資訊,請參閱 RunCustomTool 方法、BuildManager 物件簡介VSProjectItem 物件和 BuildManager 物件。

Properties 屬性

一般擴充性模型在下列三個物件中具有 Properties 屬性:

  • Project 物件:這個物件中的屬性與 IDE 中專案 [屬性頁] 對話方塊之 [通用屬性] 索引標籤中的屬性相同。

  • Configuration 物件:這個物件中的屬性與 IDE 中專案 [屬性頁] 對話方塊之 [組態屬性] 索引標籤中的屬性相同。

  • ProjectItem 物件:這個物件中的屬性與在 [方案總管] 中選取專案項目之後出現在 [屬性] 視窗中的屬性相同。

  • 在上述所有情況下,Properties 屬性都是 Property 型別之物件的集合。只要指定屬性以 1 起始的索引或屬性名稱,就可以從集合中取得 Property 物件。集合的內容則視語言別有所不同。在專案項目的案例中,內容將因項目是檔案或資料夾而有不同。

請參閱

概念

Visual Studio Automation 的範圍

其他資源

建立增益集和精靈