[VSIX] 第一次寫個簡單Visual Studio 外掛就上手

2017-07-24

認識Visual Studio 好像也十幾年了,好像從頭到尾都是用別人寫得自己沒寫過擴充套件(外掛),好啦,其實,我以前寫過,這次重新寫的時候發現有點改變,所以今天筆記一下,先說一下今天要寫的基於平台是Visula Studio 2017 ,今天的目標是在 上面工具選單下面有一個自己創的選項,然後按下後會幫專案自動下載一個JQuery 檔案並且加入至專案
image

首先,你要開啟VSIX Project  專案
圖片 061

再來 新增 Custom Command 檔案

圖片 062  

1. 改變 選單裡面的顯示文字,因為我預設新開的檔案叫做Comman1.cs  所以你可以在 Command1Package.vsct 中找到設定選單的名稱這邊我改變成當麻測試下載JQUERY至專案
圖片 066

2. 再來就是撰寫點擊後,下載並且加入至專案 ,在Command1.cs 你會看到   private void MenuItemCallback(object sender, EventArgs e) 他預設就有一個跳題示的視窗程式所以我們知道 可以透過

                    VsShellUtilities.ShowMessageBox(
                       this.ServiceProvider,
                      "MESSAGE",
                      "TITLE",
                       OLEMSGICON.OLEMSGICON_INFO,
                       OLEMSGBUTTON.OLEMSGBUTTON_OK,
                       OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);

來跳出提示視窗這時候我們必須要抓到他開啟的 方案 跟專案 ,並且從網路上下載後透過AddFromFileCopy 加入至專案,這邊是
C# code :
            EnvDTE80.Solution2 solution;
            var dte = (EnvDTE.DTE)ServiceProvider.GetService(typeof(EnvDTE.DTE));
            if (dte != null)
            {
               
                solution = (EnvDTE80.Solution2)dte.Solution;
                if (solution != null)
                {
                    VsShellUtilities.ShowMessageBox(
                       this.ServiceProvider,
                      "開始下載JQuery至專案中",
                      "Info",
                       OLEMSGICON.OLEMSGICON_INFO,
                       OLEMSGBUTTON.OLEMSGBUTTON_OK,
                       OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);

                    if (solution.Projects.Count > 0)
                    {

                        Projects projects = solution.Projects;
                        var list = new List<Project>();
                        var item = projects.GetEnumerator();
                        while (item.MoveNext())
                        {
                            var project = item.Current as Project;
                            WebClient wc = new WebClient();
                            wc.DownloadFile("https://code.jquery.com/jquery-3.2.1.min.js", Path.GetTempPath() + "jquery.js");
                            project.ProjectItems.AddFromFileCopy(Path.GetTempPath() + "jquery.js");

                        }
                    }

                }


            }


這邊主要目的就是讓你建立可以跟你目前專案互動的方法,我知道這功能很沒用但是就是練習吧

有任何問題這邊有source code : https://github.com/donma/VSExtensionDemo1

reference :

https://msdn.microsoft.com/en-us/library/4y34x89h.aspx
http://www.wwwlicious.com/2011/03/29/envdte-getting-all-projects-html/
https://www.mztools.com/Articles/2014/MZ2014009.aspx


當麻許的超技八 2014 | Donma Hsu Design.