[VSIX] 自動下載某一個NUGET 上的套件至專案中

2017-07-24

上一篇文章 [VSIX] 第一次寫個簡單Visual Studio 外掛就上手 寫完後,有朋友就問我說,是否可以讓他按下後可以讓專案安裝某個NUGET 上面的套件,後來上網查了一下之後,是要對 Package Manager Console 去下指令,其中,概念不難,只要方向然後網路上找一下方法就可以了

圖片 071
1.  建立VSIX 專案,相關方法 可以參考 [VSIX] 第一次寫個簡單Visual Studio 外掛就上手

2. 點選 後的事件:
C# Code :

 private void MenuItemCallback(object sender, EventArgs e)
 {

            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,
                      "安裝JSON.net至專案中",
                      "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;
                            EnvDTE.DTE _ObjDTE = project.DTE;
                            var script = "Install-Package Newtonsoft.Json -ProjectName " + project.Name;
                            _ObjDTE.ExecuteCommand("View.PackageManagerConsole", script);

                        }
                    }

                }

 }


其中 "View.PackageManagerConsole" 會將 套件管理主控台叫起來
image

之後執行安裝指令,至於安裝指令 可以參考 nuget 網站 上面都有
image

這樣就可以做到點選後就直接幫專案安裝上指定NUGET 上的套件

source code : https://github.com/donma/VSExtensionDemo2 

reference :
https://stackoverflow.com/questions/19030547/access-the-powershell-console-package-manager-console-of-visual-studio-program


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