diff --git a/src/Nyanbyte.DotnetTools.Update/Nyanbyte.DotnetTools.Update.csproj b/src/Nyanbyte.DotnetTools.Update/Nyanbyte.DotnetTools.Update.csproj index 2150e37..b0d28b5 100644 --- a/src/Nyanbyte.DotnetTools.Update/Nyanbyte.DotnetTools.Update.csproj +++ b/src/Nyanbyte.DotnetTools.Update/Nyanbyte.DotnetTools.Update.csproj @@ -5,6 +5,15 @@ net8.0 enable enable + true + update + ./nupkg + + + + + + diff --git a/src/Nyanbyte.DotnetTools.Update/Program.cs b/src/Nyanbyte.DotnetTools.Update/Program.cs index 3751555..bf8719b 100644 --- a/src/Nyanbyte.DotnetTools.Update/Program.cs +++ b/src/Nyanbyte.DotnetTools.Update/Program.cs @@ -1,2 +1,41 @@ -// See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); +using System.Diagnostics; +using Microsoft.Build.Evaluation; +using Microsoft.Build.Locator; + +internal class Program +{ + private static void Main(string[] args) + { + string path = args.Length > 0 ? args[0] : Environment.CurrentDirectory; + MSBuildLocator.RegisterDefaults(); + Run(path); + } + + private static void Run(string path) + { + Console.WriteLine(path); + var projs = Directory.GetFiles(path, "*.csproj", SearchOption.AllDirectories).ToHashSet(); + + HashSet tasks = []; + + foreach (var projectPath in projs) + { + Project project = Project.FromFile(projectPath, new()); + foreach (var pkg in project.GetItems("PackageReference")) + { + string pkgName = pkg.EvaluatedInclude; + string version = pkg.GetMetadataValue("Version"); + + Console.WriteLine($"Updating {pkgName} from v{version}..."); + Task t = Task.Run(async () => + { + var proc = Process.Start("dotnet", $"add {projectPath} package {pkgName}"); + await proc.WaitForExitAsync(); + }); + tasks.Add(t); + } + } + + Task.WaitAll(tasks.ToArray(), TimeSpan.FromMinutes(5)); + } +}