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