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.");
}
}
}