這段時間公司新做了一個支付系統,裡面有N個背景服務,每次有更新修改,拷貝打包釋出包“不亦樂乎”。。。于是我想要不要自己定制個打包插件。
部分朋友可能會認為,有現成的可以去找一個,幹嘛不用持續內建工具啊。
1、公司沒用,也不打算用
2、自己想折騰下,好奇
是以主要是分享這次的學習過程和結果。
大概構想下,選擇需要打包的項目-重新編譯-拷貝生成檔案到指定目錄-OK,剩下就是交給測試去做了。
1、Visual Studio Package 初步使用
2、.Net 執行Dos指令
3、MSBuild簡單運用
4、File.Copy的使用
Visual Studio 2013 SDK包的下載下傳位址:http://www.microsoft.com/en-us/download/details.aspx?id=40758&fa43d42b-25b5-4a42-fe9b-1634f450f5ee=True
完畢後,在建立項目-C#-擴充性,可以見到Visual Studio Package模闆選項(見下圖)
下一步,勾選Menu Command;下一步,修改Command Name;下一步,取消單元測試,Finish。恭喜,您的第一個插件程式就這麼誕生了。
編譯後,到生成目錄下,執行.vsix檔案,安裝完後,重新開機VS,點選[工具]就會見到您的插件工具。同時你也可以在擴充與更新界面進行對您的插件進行解除安裝。
初建項目,有很多檔案,有幾個下面是需要了解一下的。
1、PackingTools.vsct
2、PackingToolsPackage.cs
3、source.extension.vsixmanifest
vsct是個Xml檔案,它用來對插件按鈕進行配置的。
Group是組節點,項目初建,它的Parent為IDM_VS_MENU_TOOLS,對于這個我們可以檢視 您的vs安裝目錄\Visual Studio2013\VSSDK\VisualStudioIntegration\Common\Inc\vsshlids.h,打開檔案,我們可以看到除IDM_VS_MENU_TOOLS以外還有IDM_VS_MENU_ADDINS、IDM_VS_MENU_HELP等等,我們嘗試改成IDM_VS_MENU_HELP。
Buttons節點下,可以添加多個Button資訊,我們嘗試添加一個Button進去,同時GuidSymbol加多一個IDSymbol進去。修改對應新按鈕的id 和 priority。
我們啟動F5,調試看看,插件按鈕位置變了,也是我們第一次修改了按鈕布局。
插件程式的入口,我們細看代碼,發現在Initialize方法裡,就對批量打包這個按鈕進行事件綁定,我們嘗試一下,把MenuItemCallback裡的邏輯删了,展示一個wpf窗體出來。
添加建立項-添加wpf窗體後,需要在項目裡新引用一個System.Xaml.dll才能編譯通過。
接着,我們在PackingToolsPackage.cs的MenuItemCallback的方法裡寫new MainWindow().Show(),F5運作->點選批量打包,則會彈出下圖。
主界面就這麼出來了,當然,你可以單例一個窗體,不用new。。。
對Visual Studio 擴充的配置,如:檔案模闆,項目工程模闆,依賴程式集,Visual Studio 工具包logo,VS安裝的版本等等。
這個其實并沒什麼特别難的邏輯,隻是開始找資料花了一些時間,直接上代碼。
View Code
對于IVsSolution這個接口的命名空間下,還有各種各樣的類,對Visual Studio Package開發有興趣的同學可以去看看。傳送門
Microsoft Build Engine 是MSBuild的全稱,是一個獨立的存在生成平台,不需要依賴vs,但是vs的生成、釋出等等功能都是基于MSBuild去建構的,它能讀取.sln、.csproj、.pubxml等xml檔案裡的參數進行生成解決和項目。這裡就不做過多的介紹和深入,有需要可以點選這裡進行檢視文檔
MSBuild.exe在C:\Windows\Microsoft.NET\Framework\v4.0.30319 這個路徑下,值得注意的是Framework 的位數和版本,這個影響選擇MSBuild.exe的路徑。
嘗試一下,打開cmd,輸入-> C:\Windows\Microsoft.NET\Framework\v4.0.30319 "您的項目檔案路徑" /t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=12.0
這句話指,用msbuild重新生成Release版本,注意項目路徑是有雙引号的。
然而,我們需要在.net程式裡使用這段dos指令,是以我們寫編寫一個dos指令幫助類
從上面我們已經讀取到了解決方案對應的項目資訊,包括路徑,建立的項目預設生成到.csproj檔案目錄下的bin/Release裡。
我們利用Path.GetDirectoryName和Path.Combine方法,擷取對應路徑,再自己編寫檔案操作幫助類,對應Release裡的檔案複制到指定位置。
最後我們隻需要完善釋出按鈕事件,擷取清單選擇項->擷取打包到的指定路徑->周遊清單項資料->執行MSBuild指令->複制檔案到指定路徑->完畢
源碼我這裡沒有提供,還是希望讀了這篇文章感興趣的小夥伴動手折騰下,Visual Studio Package還可以做模版開發等等,我也沒太多的去深入了解,感興趣的可以去google一下關鍵字Visual Studio Package、vssdk、vsix、插件開發。
以上純屬自己初步折騰的結果,為了寫文章弄出來的簡單demo,還有很多可優化的地方,例如各種驗證判斷,插件按鈕的動态顯示、讀取項目的類型過濾、web項目的釋出,檔案過濾複制等等。。。。
本篇文章有什麼寫錯的或者更好的建議麻煩大家在評論寫給我,我會一一補充修改。如果對大家有幫助,還希望推薦一下,謝謝。
作 者:
陳珙
出 處:http://www.cnblogs.com/skychen1218/
關于作者:專注于微軟平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。
聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!