diff --git a/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs b/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs
index 6e8cda7..ebdea7e 100644
--- a/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs
+++ b/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs
@@ -153,6 +153,24 @@ public partial class MainWindowViewModel : ViewModelBase
ParityResults?.Add(e.Message);
}
}
+
+ [RelayCommand]
+ private async Task UpdateAllProjectsToNet80(CancellationToken token)
+ {
+ ErrorMessages?.Clear();
+ ParityResults.Clear();
+ ResultsLabel = string.Empty;
+ try
+ {
+ DotNetUpgrade.UpdateProjectsInSolutionToNet80(SolutionFilePath);
+ ResultsLabel = "Successfully updated all projects in solution to .NET 8";
+ }
+ catch (Exception e)
+ {
+ ResultsLabel = "Failed to update all projects in solution to .NET 8";
+ ParityResults?.Add(e.Message);
+ }
+ }
[RelayCommand]
private async Task LoadSolutionFile(CancellationToken token)
diff --git a/DotNetSolutionTools.App/Views/MainWindow.axaml b/DotNetSolutionTools.App/Views/MainWindow.axaml
index 2e45401..ce809d3 100644
--- a/DotNetSolutionTools.App/Views/MainWindow.axaml
+++ b/DotNetSolutionTools.App/Views/MainWindow.axaml
@@ -95,6 +95,15 @@
Clear bin and obj folders
+
diff --git a/DotNetSolutionTools.Core/DotNetUpgrade.cs b/DotNetSolutionTools.Core/DotNetUpgrade.cs
new file mode 100644
index 0000000..fedb844
--- /dev/null
+++ b/DotNetSolutionTools.Core/DotNetUpgrade.cs
@@ -0,0 +1,36 @@
+using Microsoft.Build.Construction;
+using Microsoft.Build.Definition;
+using Microsoft.Build.Evaluation;
+
+namespace DotNetSolutionTools.Core;
+
+public static class DotNetUpgrade
+{
+ public static void UpdateProjectsInSolutionToNet80(string solutionFilePath)
+ {
+ var solutionFile = SolutionFile.Parse(solutionFilePath);
+ var csprojList = SolutionProjectParity.GetCSharpProjectObjectsFromSolutionFile(
+ solutionFile
+ );
+ UpdateProjectsToNet80(csprojList);
+ }
+
+ private static void UpdateProjectsToNet80(List projects)
+ {
+ foreach (var project in projects)
+ {
+ var evalProject = Project.FromProjectRootElement(project, new ProjectOptions(){LoadSettings = ProjectLoadSettings.IgnoreMissingImports});
+ var packages = evalProject.GetItems("PackageReference");
+ //packages.First().Metadata.First().UnevaluatedValue = "9.0.0";
+ var targetFramework = project.PropertyGroups
+ .SelectMany(x => x.Properties)
+ .FirstOrDefault(x => x.Name == "TargetFramework");
+ if (targetFramework?.Value is "net7.0")
+ {
+ targetFramework.Value = "net8.0";
+ project.Save();
+ FormatCsproj.FormatCsprojFile(project.FullPath);
+ }
+ }
+ }
+}
\ No newline at end of file