逐步解說:建立會在載入專案時觸發的簡單專案功能
更新:2010 年 7 月
您可以建立專案功能,以在發生專案相關動作時執行自訂動作。 在這個逐步解說中,您會建立名為 SampleProjectFeature 的專案功能,這個功能會在載入資料庫專案時顯示對話方塊。 您可以將這個範例修改為在載入資料庫專案時執行動作。
在這個逐步解說中,您將完成下列主要工作:
建立 Visual Studio 封裝
定義專案功能
測試專案功能
必要條件
您需要下列元件才能完成此逐步解說:
您必須已安裝 Visual Studio 2010 Professional、Visual Studio 2010 Premium 或 Visual Studio 2010 Ultimate。
您必須具有資料庫專案。
您也必須在電腦中安裝 Visual Studio 2010 SDK。 若要下載這個套件,請參閱 Microsoft 網站的網頁:Visual Studio 2010 SDK (英文)。
注意事項 |
---|
此逐步解說適合已經熟悉 Visual Studio 資料庫功能的使用者使用。 您也必須熟悉基本的 Visual Studio 概念,例如如何建立類別庫,以及如何使用程式碼編輯器,將程式碼加入至類別。 |
建立 Visual Studio 封裝
若要啟動 Visual Studio Integration Package 精靈
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
展開 [已安裝的範本] 清單中的 [其他專案類型] 節點,然後按一下 [擴充性] 節點。
在詳細資料窗格中,按一下 [Visual Studio Package]。
重要事項 如果您未安裝 Visual Studio 2010 SDK,[Visual Studio Integration Package] 專案類型會無法使用。
在 [名稱] 中,輸入 SampleProjectFeature。
按一下 [確定]。
[Visual Studio Integration Package 精靈] 隨即出現。
接下來,您會使用精靈設定要建立的專案。
若要使用 Visual Studio Integration Package 精靈建立專案
按一下 [下一步]。
按一下 [選擇語言] 中的 [Visual C#]。
注意事項 您也可以使用 Visual Basic 或 Visual C++ 方法來建立套件。 這個逐步說明只會顯示 Visual Basic 和 Visual C# 適用的範例程式碼。
按一下 [取得用於簽署組件的金鑰] 中的 [產生新的金鑰檔來簽署組件]。
按一下 [下一步]。
在 [公司名稱] 中,輸入 MyCompany。
在 [VSPackage 名稱] 中,輸入 SampleProjectFeature。
(選擇性) 您可以提供特定版本號碼。
(選擇性) 您可以自訂套件使用的圖示。
(選擇性) 您可以在 [詳細資訊] 方塊中提供套件的其他資訊。
按一下 [下一步]。
選取 [功能表命令] 核取方塊。
確認已清除 [工具視窗] 和 [自訂編輯器] 核取方塊。
按一下 [下一步]。
在 [命令名稱] 中,輸入 Toggle Project Loaded Dialogs。
在 [命令 ID] 中,輸入 cmdidEnableDialogs。
按一下 [下一步]。
清除 [整合測試專案] 和 [單元測試專案] 核取方塊。
注意事項 如果您建立的是要給組織正式使用的套件,則應該考慮為套件建立測試,以確認套件可以正常運作。
按一下 [完成]。
Visual Studio Integration Package 專案隨即建立並出現在 [方案總管] 中。
接下來,您將自訂套件中的程式碼以定義資料庫專案功能。
定義專案功能
若要修改套件定義以定義資料庫專案功能,您必須更新套件定義,然後加入 SampleProjectFeature 類別。
若要更新套件定義
按兩下 [方案總管] 中的 [SampleProjectFeaturePackage.cs],在程式碼編輯器中加以開啟。
在程式碼編輯器中,找出 MenuItemCallback 方法。
以下列程式碼取代方法定義:
private void MenuItemCallback(object sender, EventArgs e) { SampleProjectFeature.EnableDialogs = !SampleProjectFeature.EnableDialogs; }
注意事項 [錯誤清單] 中會出現錯誤,因為您尚未定義 SampleProjectFeature 類別和 EnableDialogs 方法。
按一下 [檔案] 功能表上的 [儲存 SampleProjectFeaturePackage.cs]。
接下來,您會定義專案功能類別。
若要定義 SampleProjectFeature 類別
在 [方案總管] 中,以滑鼠右鍵按一下 SampleProjectFeature 專案、指向 [加入],再按一下 [類別]。
[加入新項目] 對話方塊隨即出現,並且已反白顯示類別樣板。
在 [名稱] 中,輸入 SampleProjectFeature.cs。
按一下 [加入]。
新的類別隨即加入至專案,而且編輯器隨即出現並顯示類別定義。
在 [方案總管] 中,以滑鼠右鍵按一下專案,然後按一下 [加入參考]。
[加入參考] 對話方塊隨即出現。
按一下 [.NET] 索引標籤。
在元件清單中反白顯示下列參考,然後按一下 [確定]:
Microsoft.Data.Schema
Microsoft.VisualStudio.Data.Schema.Package
在程式碼編輯器中,將下列 using 陳述式加入至類別定義:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Data.Schema.Extensibility; using Microsoft.Data.Schema; using Microsoft.VisualStudio.Data.Schema.Package.Project; using Microsoft.VisualStudio.Shell.Interop; using System.Globalization;
修改類別定義,以指定基底類別並且提供屬性來指定這個功能會與哪些資料庫結構描述提供者相容。 這個逐步解說的範例會與所有的資料庫結構描述提供者相容。
[DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))] class SampleProjectFeature : IDatabaseProjectFeature { }
關鍵的介面、型別和方法為 DatabaseSchemaProviderCompatibilityAttribute、DatabaseSchemaProvider 和 IDatabaseProjectFeature。
將一對屬性加入至類別:
public static bool EnableDialogs { get; set; } private IDatabaseProjectNode ProjectNode { get; set; }
第一個屬性由可以啟用或停用這個專案功能的命令所使用。 值得注意的介面是 IDatabaseProjectNode。
將下列建構函式加入至類別:
static SampleProjectFeature() { EnableDialogs = true; }
這個建構函式會將 EnableDialogs 屬性初始化。
將下列 Initialize 方法加入至類別:
public void Initialize(IDatabaseProjectNode projectNode) { ProjectNode = projectNode; // Hook up to a few events ProjectNode.ProjectLoaded += delegate { ShowDialog("In ProjectLoaded Event"); }; }
這個 Initialize 方法會識別要套用功能的專案,然後準備要監看 ProjectLoaded 事件。
最後,加入下列 ShowDialog 方法,這個方法會在功能已啟用且發生 ProjectLoaded 事件時顯示對話方塊:
void ShowDialog(string msg) { if (!SampleProjectFeature.EnableDialogs) return; // Show a Message Box to indicate that we were here IVsUIShell uiShell = (IVsUIShell)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox( 0, ref clsid, "Simple Project Feature", msg, string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, // false out result)); }
如果使用者已經使用功能表命令關閉功能,則這個方法會傳回。 否則,這個方法會顯示對話方塊。 在您自己的專案功能中,您可以執行其他處理,而不是顯示對話方塊。
按一下 [檔案] 功能表上的 [儲存 SampleProjectFeature.cs]。
下一步,您將會建置專案。
若要建置專案
- 在 [建置] 功能表上,按一下 [建置方案]。
接下來,您將收集專案中產生的組件資訊,包括版本、文化特性和 PublicKeyToken。
若要收集組件資訊
開啟 [開始] 功能表,並依序指向 [Microsoft Visual Studio 2010]、[Visual Studio Tools],然後按一下 [Visual Studio 命令提示字元 (2010)]。
巡覽至您建置的組件 (SampleProjectFeature.dll) 所在的資料夾。
輸入下列命令列:
SN.EXE -T SampleProjectFeature.dll
記下公開金鑰語彙基元。 在下一個程序中將會用到這項資料。
接下來,您將使用在上一個程序中收集的組件資訊來建立 XML 檔案。
若要建立 XML 檔
在 [方案總管] 中,選取 SampleProjectFeature 專案。
在 [專案] 功能表中選取 [加入新項目]。
在 [範本] 窗格中,找出並選取 [XML 檔] 項目。
在 [名稱] 文字方塊中輸入 SampleProjectFeature.Extensions.xml,然後按一下 [加入] 按鈕。
SampleProjectFeature.Extensions.xml 檔會加入至 [方案總管] 中的專案。
開啟並更新 SampleProjectFeature.Extensions.xml 檔,以與下列 XML 相符。 取代您在前一個程序擷取的 PublicKeyToken。
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type=" MyCompany.SampleProjectFeature.SampleProjectFeature" assembly="SampleProjectFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
在 [檔案] 功能表上,按一下 [儲存]。
接下來,您會修改 Extensions.xml 檔案的屬性,以將此檔案納入 vsixmanifest 中。
若要將 SampleProductFeature.Extensions.xml 納入 vsixmanifest 中
在 [方案總管] 中,按一下 SampleProjectFeature.Extensions.xml。
在 [屬性] 視窗中,將 [建置動作] 屬性變更為 [內容]。
將 [加入至 VSIX] 屬性變更為 [True]。
在 [檔案] 功能表上按一下 [全部儲存]。
在 [組建] 功能表上按一下 [建置 SampleProjectFeature]。
vsixmanifest 檔案隨即更新。 接下來,您即可準備開始測試專案功能。
測試專案功能
若要測試專案功能,您必須先建置該功能,然後就可以按 F5 開始 Visual Studio 的實驗性建置。
若要建置和測試資料庫專案功能
按一下 [專案] 功能表上的 [建置]。
專案應該會順利建置。
按 F5 在 Visual Studio 的實驗性建置中執行套件。
實驗性質的 Visual Studio 執行個體隨即出現。 [工具] 功能表上隨即出現 Toggle Project Loaded Dialogs 命令。
在 [檔案] 功能表上,指向 [開啟],並按一下 [專案/方案]。
瀏覽至您要開啟的資料庫專案 (.dbproj),然後按一下 [開啟]。
載入資料庫專案時,會出現一個對話方塊,裡面有 "Simple Project Feature In ProjectLoaded Event" 訊息。
現在,您可以自訂專案功能以加入更多的功能。
後續步驟
如果您複製在這個逐步解說中建立的功能做為您工作的起點,您必須:
為您的擴充功能指定唯一的名稱
為您的擴充功能指定唯一的 GUID
當您使用 [Visual Studio Integration Package 精靈] 建立新的套件時,精靈會自動為您建立新的 GUID。
您必須先註冊套件,套件才會出現在一般的 Visual Studio 執行個體中。 如需 VSPackage 的詳細資訊,請參閱:
請參閱
工作
How to: Troubleshoot VSPackages
概念
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 7 月 |
小幅修正 Extensions.xml 檔案,以處理客戶識別的問題。 |
客戶回函。 |