天天看點

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  這一篇是VS插件基于Visual Studio SDK擴充開發的,可能有些朋友看到【生成實體】心裡可能會暗想,T4模闆都可以做了、動軟不是已經做了麼、不就是讀庫儲存檔案到指定路徑麼……

  我希望做的效果是:

  1.工具內建到vs上

  2.動作完成後展現到項目(添加、删除項目項)

  3.使用簡單、輕量、靈活(配置化)

  4.不依賴ORM(前兩點有點像EF的DBFirst吧?)

  文章最後會給上源碼位址。

   下面是效果圖:

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  以上是完整處理流程,我打算選擇部分流程來講。如果有對Visual Studio Package開發還沒一個認識,可以看我之前寫的一篇《Visual Studio Package 插件開發》。

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  從上圖看見,按鈕是在選中項目右鍵彈出的菜單欄裡。

  打開vsct檔案,修改Group的Parent節點,修改對應的guid和id。

  之前那邊文章有提到在檔案:您的vs安裝目錄\VisualStudio2013\VSSDK\VisualStudioIntegration\Common\Inc\vsshlids.h 可以找到需要修改的名稱,但是右鍵是沒有在檔案裡定義,是以我們需要另外換一種方法。

  1、打開系統資料庫編輯器(打開運作視窗,輸入regedit),

  2、路徑[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General],

  3、右擊-建立-DWORD(32-位)值(D),其命名為EnableVSIPLogging

  4、并将其值改為1。重新開機VS,打開項目

  5、按下Ctrl+Shift,對項目點選右鍵,就會彈出視窗(如下圖)

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  Guid和CmdID的值就是我們需要的,在vsct檔案Symbols節點添加GuidSymbol項,value上圖的{D309F791-903F-11D0-9EFC-00A0C911004F},IDSymbol項value為1026。

  最後在Group的Parent節點的屬性guid和id改為與上面對應,下面代碼為例子。

PS:上面方法有點久遠了,現在2017、2019可以用新的方式來查找需要的功能guid與cmdID。

在VS的【擴充與更新】搜尋并安裝Extensibility Tools,然後在vs【視圖】-【 Enable VSIP Logging】點選并重新開機後,就可以用ctrl+shirt+右鍵點選需要查的界面,就可以彈出需要的資訊,我測試過vs2017可用。

非常感謝yanusosu兄弟的貢獻。

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

View Code

   重點是DTE 接口的使用,MSDN的描述是:DTE 接口Visual Studio 自動化對象模型中的頂級對象。強大到目前開發環境中任何屬性可以拿到例如:目前打開的文檔集合,解決方案下的項目資訊……剩下自己看,傳送門

   下面是代碼示例:

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  配置存放兩點資訊:資料庫連接配接、類檔案模版,同時我們約定存放在項目根目錄下。如下圖

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  那麼,剩下就是XML的基本擷取處理了。__entity.xml的模版在源碼裡,可自行拷貝去需要使用的項目,以下是代碼示例:

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  查詢目前資料庫的表集合,傳給窗體做清單展示,直接上代碼:

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  選擇響應的表後,查詢出對應的表結構,一般實體的所需要的資訊有:列名、列備注、類型、長度、是否主鍵、是否自增長、是否可空,繼續上代碼:

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  開始我是嘗試用T4的,發現不友善,繁雜的聲明。是以我選擇了nVelocity,這裡不做太多介紹,附上相關文章學習,傳送門

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  之前已經拿到的檔案模版,通過上面的方法輸出類文本,儲存到選中項目的根目錄下。

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  終于到了最後一步了,部分人以為儲存了檔案後就完事了,最後通過包含檔案就完事了。我們還是有點追求的,既然做成了插件就要更加的友善化。

  通過之前[讀取選中項目資訊]步驟拿到的EnvDTE.Project ProjectDte,使用以下擴充方法進行添加、删除項目項。

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)
Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  部分同學可能想調試的時候會出現:無法直接啟動“類庫輸出類型”項目,可以在項目屬性-調試配置:

  1.啟動配置外部程式:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe

  2.指令行參數:/rootsuffix Exp

Visual Studio Package 插件開發之自動生成實體工具(Visual Studio SDK)

  估計有同學會制作自己的圖示,另外附上兩條icon制作的網站:

  http://iconfont.cn/search/index

  http://www.easyicon.net/covert/

  整篇文章的技術難點并不多,但是因為插件開發的資料相對較少,80%的時間花去找接口文檔、找資料。

  此工具的原型是公司架構師的,公司所有開發都在用,但是他把源碼丢了………………好奇心使我重新實作了一份,當然了,說不定哪天帶團隊的時候會用上。

  最後雙手奉上源碼,并不是什麼牛逼的東西,希望可以幫助需要的同學。https://github.com/SkyChenSky/AutoBuildEntity

  如果本篇文章對您有幫助,可以點選左下角的推薦,這是給我最大的鼓勵,如果有什麼建議和優化,可以在下面評論提出,謝謝。

作  者:

陳珙

出  處:http://www.cnblogs.com/skychen1218/

關于作者:專注于微軟平台的項目開發。如有問題或建議,請多多賜教!

版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!