Nuget download

Posted Av  MrBister -  november 29, 2023
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Xml;

class Program
{
static void Main(string[] args)
{


if (args.Length != 2)
{
//Console.WriteLine("Användning: NuGetDownloader <projektfil> <utmatningskatalog>");
//return;
args = new string[2];
args[0] = "/Users/martinbetz/Projects/NugetDownload/NugetDownload/NugetDownload.csproj";
args[1] = "nugetpaketen";
}

string projectFilePath = args[0];
string outputDirectory = args[1];

if (!File.Exists(projectFilePath))
{
Console.WriteLine("Projektfilen existerar inte.");
return;
}

// Läs och analysera projektfilen
var packages = GetNuGetPackages(projectFilePath);

if (packages.Count == 0)
{
Console.WriteLine("Inga NuGet-paket hittades i projektfilen.");
return;
}

// Skapa utmatningskatalogen om den inte redan finns
if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory);
}

// Använd NuGet CLI för att installera paketen
InstallNuGetPackages(packages, outputDirectory);

Console.WriteLine("Alla NuGet-paket har laddats ner framgångsrikt.");
}

static List<string> GetNuGetPackages(string projectFilePath)
{
List<string> packages = new List<string>();

XmlDocument doc = new XmlDocument();
doc.Load(projectFilePath);

XmlNodeList packageNodes = doc.SelectNodes("//PackageReference");
foreach (XmlNode node in packageNodes)
{
string packageName = node.Attributes["Include"].Value;
packages.Add(packageName);
}

return packages.Distinct().ToList();
}

static void InstallNuGetPackages(List<string> packages, string outputDirectory)
{
int totalPackages = packages.Count;
int completedPackages = 0;

foreach (string package in packages)
{
Console.WriteLine($"Laddar ner NuGet-paket: {package}");

Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "nuget.exe",
Arguments = $"install {package} -OutputDirectory {outputDirectory}",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
}
};

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

completedPackages++;
double progressPercentage = (double)completedPackages / totalPackages * 100;
Console.WriteLine($"Jobbar: {progressPercentage:F2}% av paketen har laddats ner.");
}
}
}
Redigera