diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Godot.NET.Sdk.csproj b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Godot.NET.Sdk.csproj index 81a2172b91..a460685cac 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Godot.NET.Sdk.csproj +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Godot.NET.Sdk.csproj @@ -6,8 +6,8 @@ Godot Engine contributors Godot.NET.Sdk - 3.2.3 - 3.2.3 + 3.2.4 + 3.2.4 https://github.com/godotengine/godot/tree/master/modules/mono/editor/Godot.NET.Sdk MSBuildSdk MSBuildSdk diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props index a965456a04..c9d90f4810 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props @@ -2,8 +2,6 @@ true - - {8F3E2DF0-C35C-4265-82FC-BEA011F4A7ED} diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.targets b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.targets index b9c17bad1e..480b5109b1 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.targets +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.targets @@ -1,11 +1,6 @@ - - true - $(GodotProjectTypeGuid);$(DefaultProjectTypeGuid) - - - + diff --git a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs index 7e795ec016..5f54bb4d9a 100644 --- a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs +++ b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs @@ -8,9 +8,8 @@ namespace GodotTools.ProjectEditor { public static class ProjectGenerator { - public const string GodotSdkVersionToUse = "3.2.3"; - - public static string GodotSdkAttrValue => $"Godot.NET.Sdk/{GodotSdkVersionToUse}"; + public const string GodotSdkVersionToUse = "3.2.4"; + public const string GodotSdkNameToUse = "Godot.NET.Sdk"; public static ProjectRootElement GenGameProject(string name) { @@ -19,7 +18,7 @@ namespace GodotTools.ProjectEditor var root = ProjectRootElement.Create(NewProjectFileOptions.None); - root.Sdk = GodotSdkAttrValue; + root.Sdk = $"{GodotSdkNameToUse}/{GodotSdkVersionToUse}"; var mainGroup = root.AddPropertyGroup(); mainGroup.AddProperty("TargetFramework", "net472"); diff --git a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs index ba3772c938..742f8c616e 100644 --- a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs +++ b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs @@ -4,11 +4,13 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using System.Xml; using System.Xml.Linq; using JetBrains.Annotations; using Microsoft.Build.Construction; using Microsoft.Build.Globbing; +using Semver; namespace GodotTools.ProjectEditor { @@ -189,7 +191,7 @@ namespace GodotTools.ProjectEditor continue; - string normalizedRemove= item.Remove.NormalizePath(); + string normalizedRemove = item.Remove.NormalizePath(); var glob = MSBuildGlob.Parse(normalizedRemove); @@ -233,7 +235,7 @@ namespace GodotTools.ProjectEditor if (!string.IsNullOrEmpty(root.Sdk)) return; - root.Sdk = ProjectGenerator.GodotSdkAttrValue; + root.Sdk = $"{ProjectGenerator.GodotSdkNameToUse}/{ProjectGenerator.GodotSdkVersionToUse}"; root.ToolsVersion = null; root.DefaultTargets = null; @@ -408,11 +410,32 @@ namespace GodotTools.ProjectEditor public static void EnsureGodotSdkIsUpToDate(MSBuildProject project) { - var root = project.Root; - string godotSdkAttrValue = ProjectGenerator.GodotSdkAttrValue; + string godotSdkAttrValue = $"{ProjectGenerator.GodotSdkNameToUse}/{ProjectGenerator.GodotSdkVersionToUse}"; - if (!string.IsNullOrEmpty(root.Sdk) && root.Sdk.Trim().Equals(godotSdkAttrValue, StringComparison.OrdinalIgnoreCase)) - return; + var root = project.Root; + string rootSdk = root.Sdk?.Trim(); + + if (!string.IsNullOrEmpty(rootSdk)) + { + // Check if the version is already the same. + if (rootSdk.Equals(godotSdkAttrValue, StringComparison.OrdinalIgnoreCase)) + return; + + // We also allow higher versions as long as the major and minor are the same. + var semVerToUse = SemVersion.Parse(ProjectGenerator.GodotSdkVersionToUse); + var godotSdkAttrLaxValueRegex = new Regex($@"^{ProjectGenerator.GodotSdkNameToUse}/(?.*)$"); + + var match = godotSdkAttrLaxValueRegex.Match(rootSdk); + + if (match.Success && + SemVersion.TryParse(match.Groups["ver"].Value, out var semVerDetected) && + semVerDetected.Major == semVerToUse.Major && + semVerDetected.Minor == semVerToUse.Minor && + semVerDetected > semVerToUse) + { + return; + } + } root.Sdk = godotSdkAttrValue; project.HasUnsavedChanges = true;