2017-11-30 4 views
1

솔루션 파일에 대한 문자열 파일 경로 예. C : \ Foo.sln, 어떻게 그 솔루션을위한 NuGet 패키지를 프로그래밍 방식으로 복원합니까? this guide을 따르려고했으나 불행하게도 불완전하다는 것을 알았습니다.C# 프로그래밍 방식으로 NuGet 패키지 복원

기사가 추천 한대로 NuGet 패키지 NuGet.VisualStudio를 설치 한 후 패키지 복원을 시도하고 있습니다. 여기

내가 지금까지 가지고있는 코드입니다 :

// requires reference to System.ComponentModel.Composition 
    [Import(typeof(IVsPackageRestorer))] 
    private static IVsPackageRestorer packageInstaller; 

그리고 그것을 사용하려고 (EnvDTE 참조를 요구하는 것) (어떻게 하나 개 사용이 마법 "의 getService"방법 않습니다 - 그에서 오는가를 ?) :

private static void RestorePackages(string solutionPath) 
    { 
     // Using the IComponentModel service 
     // https://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/nuget-api-in-visual-studio#ivspackagerestorer-interface 

     // How do I get the project? Can I do this at the solution level or do I have to get all projects under the solution? 
     EnvDTE.Project project = null; 
     packageInstaller.RestorePackages(project); 

     ////What is this code??? What is GetService??? 
     ////var componentModel = (IComponentModel)GetService(typeof(SComponentModel)); 
     ////IVsPackageRestorer packageRestorer = componentModel.GetService<IVsPackageRestorer>(); 
     ////packageRestorer.RestorePackages(project); 
    } 

편집/솔루션 : 매트 구청의 추천을 사용하여, 코드가 전체 경로를 기반으로 패키지를 복원 할 내 경우에는 다음의 방법과 같은 모습을 nuget.exe하는 "밖으로 껍질"로 해결책.

private static void RestorePackages(string solutionPath) 
{ 
    using (Process process = new Process()) 
    { 
     process.StartInfo = new ProcessStartInfo 
     { 
      FileName = "nuget.exe", 
      Arguments = $"restore {solutionPath}", 
      UseShellExecute = false, 
      CreateNoWindow = true 
     }; 

     process.Start(); 
     process.WaitForExit(); 
    } 
} 

답변

1

코드가 실행되는 위치를 잘 모릅니다. Visual Studio API를 사용하는 대신 NuGet.exe를 쉘로 만들고 솔루션을 복원하는 것이 더 간단 할 수 있습니다. 링크하는 API는 Visual Studio 내에서 확장으로 실행하거나 Package Manager Console 창에서 실행하는 경우에만 사용할 수 있습니다.

작성중인 코드가 Visual Studio에서 실행되고 있지 않다면 콘솔 응용 프로그램이라고 말하면서 nuget.exe를 실행하는 것이 더 쉬울 것입니다. 그렇지 않으면 사용할 수있는 다양한 NuGet 패키지를보고 다양한 NuGet 작업을 수행하는 API를 제공 할 수 있습니다. 그러나 nuget.exe를 복원하는 것은 훨씬 간단합니다.