Gegeben ist ein Zeichenfolgendateipfad zu einer Lösungsdatei, z. C: \ Foo.sln, wie programmierst du NuGet-Pakete programmatisch für diese Lösung? Ich habe versucht, this guide zu folgen, aber habe gefunden, dass es elend unvollständig ist.C# programmgesteuert NuGet-Pakete wiederherstellen
Nach der Installation des NuGet-Pakets NuGet.VisualStudio, wie der Artikel es empfiehlt, stolpere ich darum, Pakete wiederherzustellen.
Hier ist der Code, den ich habe bisher:
// requires reference to System.ComponentModel.Composition
[Import(typeof(IVsPackageRestorer))]
private static IVsPackageRestorer packageInstaller;
Und dann versuchen, es zu verwenden (scheint EnvDTE Bezug auf erfordern) (und wie benutzt man diese Magie „GetService“ Methode - von woher die kommen ?):
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);
}
Bearbeiten/Lösung: Empfehlung Matt Ward Verwendung, zu der Code „berappen“ sieht aus wie das folgende Verfahren in meinem Fall nuget.exe Pakete wiederherzustellen, basierend auf den vollständigen Pfad zu einer Lösung.
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();
}
}