Visual Studio中開發

來源:互聯網
上載者:User

標籤:

   Visual Studio是美國微軟公司開發的一個基本完整的開發工具集,它包括了整個軟體生命週期中所需要的大部分工具,如UML工具、代碼管控工具、整合式開發環境(IDE)等等,且所寫的目標代碼適用於微軟支援的所有平台.可以說.NET開發人員離不開它,它可以極大的提高編寫軟體的效率. Visual Studio作為一個世界級開發工具,當然支援通過外掛程式方式對其功能進行擴充,開發人員可以定製自己的外掛程式來進一步提升Visual Studio的功能.

1 什麼是Add In?

  所謂的add-in就是一些被Visual Studio載入到記憶體中啟動並執行,能給使用者提供特定功能的DLL動態連結程式庫. 對於一般的開發情景來說,最常見的add-in用法就是可以通過.NET語言訪問 DTE2 對象. DTE2是Visual Studio Automation Model的頂層對象,它具有一組介面和對象可以與 Visual Studio進行互動.DTE2可以做以下這些事情:

  • 訪問和調用Visual Studio內建的函數和對象
  • 執行編譯
  • 遍曆解決方案中的項目
  • 在Visual Studio IDE中定製UI
  • 擴充Visual Studio功能...
2 建立VS Add In項目

  用Visual Studio 2012建立名為MyVisualStudioAddin的項目(根據嚮導進行設定,這裡不贅述),介面如下:

3 核心 Connect 類

  外掛程式入口就是Connect 類,先看一下Connect的類圖:

  • Connect 實現增益集對象的建構函式。請將您的初始化代碼置於此方法內。
  • OnConnection 實現 IDTExtensibility2 介面的 OnConnection 方法。接收正在載入增益集的通知。
  • OnDisconnection 實現 IDTExtensibility2 介面的 OnDisconnection 方法。接收正在卸載增益集的通知。
  • OnAddInsUpdate 實現 IDTExtensibility2 介面的 OnAddInsUpdate 方法。當增益集集合已發生更改時接收通知。
  • OnStartupComplete 實現 IDTExtensibility2 介面的 OnStartupComplete 方法。接收宿主應用程式已完成載入的通知。
  • OnBeginShutdown 實現 IDTExtensibility2 介面的 OnBeginShutdown 方法。接收正在卸載宿主應用程式的通知。
  • QueryStatus 實現 IDTCommandTarget 介面的 QueryStatus 方法。此方法在更新該命令的可用性時調用。
  • Exec 實現 IDTCommandTarget 介面的 Exec 方法。此方法在調用該命令時調用。
  • _applicationObject 是DTE2執行個體,是宿主應用程式的根對象。
  • _addInInstance是當前外掛程式執行個體,表示此增益集的對象。

   首先定義一些內部的對象,主要是自訂的命令,如下所示:

 1     /// <summary>用於實現增益集的對象。</summary> 2     /// <seealso class=‘IDTExtensibility2‘ /> 3     public class Connect : IDTExtensibility2, IDTCommandTarget 4     { 5         #region 命令定義  除了FindInSolutionExplorer外,此處的命令不是根據功能來命令的,而是根據命令所出現的位置來命令的 6         private readonly string MY_COMMAND_FindInSolutionExplorer = "FindInSolutionExplorer"; 7         private readonly string MY_COMMAND_Project = "cmdInProject";//在項目上 8         private readonly string MY_COMMAND_Solution = "cmdInSolution";//在解決方案上 9         private readonly string MY_COMMAND_MenuBar = "cmdInMenuBar";//在功能表列上10         private readonly string MY_COMMAND_CodeWindow = "cmdInCodeWindow";//代碼視窗11         private readonly string MY_COMMAND_Files = "cmdInFiles";12         #endregion13 14         private Command findCommand = null;15         private CommandBarButton findCommandBarButtonButton = null;16         private AddInLogger logger = null;17 18         private DTE2 _applicationObject;19         private EnvDTE.AddIn _addInInstance;20      ......21 }

  初始化外掛程式UI的代碼:

 View Code View Code View Code View Exec Code

   擷取當前IDE啟用項目的路徑:

 1        /// <summary> 2         /// Gets the Active project FullPath 3         /// </summary> 4         /// <returns></returns> 5         public string GetActiveProjectFullPath() 6         { 7            // Returns the name of the currently selected project in the solution. 8             Project proj = getActiveProject(); 9             if (proj!=null)10             {11                 string fullPath = proj.Properties.Item("FullPath").Value.ToString();12                 return fullPath;13                // return proj.FullName;14             }15             return "";16             17         }18         /// <summary>19         /// Gets the Active project20         /// </summary>21         /// <returns></returns>22         public Project getActiveProject()23         {24             Array projects = (Array)_applicationObject.ActiveSolutionProjects;25             if (projects != null && projects.Length > 0)26             {27                 return projects.GetValue(0) as Project;28             }29             projects = (Array)_applicationObject.Solution.SolutionBuild.StartupProjects;30             if (projects != null && projects.Length >= 1)31             {32                 return projects.GetValue(0) as Project;33             }34             projects = (Array)_applicationObject.Solution.Projects;35             if (projects != null && projects.Length > 0)36             {37                 return projects.GetValue(0) as Project;38             }39             return null;40         }

  關於如何根據資料庫結構產生C# Code代碼,可以參加此文章.

4 外掛程式發布

  建立了增益集後,必須先向 Visual Studio 註冊此增益集,然後才能在“增益集管理器”中啟用它。 使用具有 .addin 副檔名的 XML 檔案來完成此操作。.addin 檔案描述了 Visual Studio 在“增益集管理器”中顯示增益集所需的資訊。 在 Visual Studio 啟動時,它會尋找 .addin 檔案位置,擷取任何可用的 .addin 檔案。 如果找到相應檔案,則會讀取 XML 檔案並向“增益集管理器”提供在單擊增益集進行啟動時所需的資訊。使用增益集嚮導建立增益集時,會自動建立一個 .addin 檔案。 你也可以使用本主題中的資訊手動建立 .addin 檔案。我是用Visual Studio2012 所以將.addin檔案和對應的dll拷貝到C:\Users\wangming\Documents\Visual Studio 2012\Addins檔案下:

  如果發布沒有錯誤,那麼重新啟動Visual Studio2012後,在專案檔上右擊快顯功能表,可以看到下面的介面:

  同時在功能表列建立了一個JackWang的命令按鈕和工具菜單下還添加了一個MyVS增益集的命令按鈕,如:

5 代碼產生器

  代碼產生器(此處用的是yuvalsol的工程,我將其整合到外掛程式中)可以根據使用者選擇的資料庫,選擇對應的表,然後產生表結構對應的C#類:

 6 外掛程式卸載

  如果自己定義的外掛程式想卸載怎麼辦?可參見https://msdn.microsoft.com/en-us/library/ms228765.aspx.

  • 刪除外掛程式對應的.addin檔案. 預設路徑為..\Users\username\My Documents\Visual Studio 2012\Addins\(請根據實際情況查看具體路徑)

  • 在 Visual Studio開發人員命令列中, 輸入devenv /resetaddin MyVisualStudioAddin.Connect  進行卸載(MyVisualStudioAddin.Connect 是MyVisualStudioAddin.AddIn檔案中的FullClassName;

  • 至此, add-in 不會出現在IDE中,卸載完成. 但是要完整去除必須手動刪除外掛程式對應的專案檔(如果你再次調試,可能會再次進行註冊);

 7 總結

  通過外掛程式機制可以方便的定製VS IDE, 一般軟體公司都有自己的一套架構,其代碼也有一定的封裝,且各不相同,可以通過擴充VS,通過定製的代碼產生工具來快速產生符合本公司所需的代碼,從而從重複機械的勞動中解放出來(雖然完全自動產生的程式碼不可能直接能用,但是人工在此基礎上進行調整,也提升了代碼的編寫效率,而且減少類似於拼字/標點等人為的錯誤點等.

  雖然我們不生產代碼,是代碼的搬運工,但是正確的開啟檔案是用代碼去幫我們搬運代碼!!!

Visual Studio中開發

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.