[英]How to install Nuget Packages using ENVDTE.DTE
我創建了一個控制台應用程序來實用地創建Visual Studio項目,在這里我無法安裝Nuget包,總是var componentModel =(IComponentModel)Package.GetGlobalService(typeof(SComponentModel)); 語句返回空值。 供您參考,我在下面添加了我的代碼。 幫助我解決此問題。
static void Main(string[] args)
{
//InstallNuGetPackages.InstallNuGet("");
string ProjectName = "WebAPIProj";
string SolutionName = "EmptyTemplate";
System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE.DTE dte = (EnvDTE.DTE)obj;
dte.MainWindow.Visible = true; // optional if you want to See VS doing its thing
// create a new solution
dte.Solution.Create("C:\\"+ SolutionName + "\\", SolutionName);
var solution = dte.Solution;
// create a C# WinForms app
solution.AddFromTemplate(@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ProjectTemplatesCache\CSharp\Web\1033\EmptyWebApplicationProject40\EmptyWebApplicationProject40.vstemplate",
@"C:\NewSolution\"+ ProjectName, ProjectName);
InstallNuGetPackages.InstallNuGet(dte);
foreach (var p in dte.Solution.Projects)
{
InstallNuGetPackages.InstallNuGet((Project)p, "Microsoft.AspNet.WebApi version1.1");
}
// save and quit
dte.ExecuteCommand("File.SaveAll");
dte.Quit();
}
安裝Nuget軟件包的代碼
public bool InstallNuGetPackage(Project project, string package)
{
bool installedPkg = true;
try
{
var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel)); //Always this statement returns null
IVsPackageInstallerServices installerServices = componentModel.GetService();
if (!installerServices.IsPackageInstalled(project, package))
{
var installer = componentModel.GetService();
installer.InstallPackage(null, project, package, (System.Version)null, false);
}
}
catch (Exception ex)
{
installedPkg = false;
}
return installedPkg;
}
(將其轉換為更好的可讀性和更多空間的答案)
created one console application
-你只需要訪問ServiceProvider
從Visual Studio,如果你在它的內部從運行您的代碼,即擴展和/或包裝 。
從控制台應用程序運行此命令將無法進行。 Visual Studio的內部確實為所有的服務和比創建的實例一般環境有更多的設置DTE
。
要說服您的路線,盡管我不確定那是否可行,請調用nuget.exe
或NuGet.Core
代碼來實現類似的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.