diff --git a/Source/Engine/Scripting/Scripting.Build.cs b/Source/Engine/Scripting/Scripting.Build.cs index 10fc2aff9..0071a60f1 100644 --- a/Source/Engine/Scripting/Scripting.Build.cs +++ b/Source/Engine/Scripting/Scripting.Build.cs @@ -20,10 +20,7 @@ public class Scripting : EngineModule void AddFrameworkDefines(string template, int major, int latestMinor) { for (int minor = latestMinor; minor >= 0; minor--) - { options.ScriptingAPI.Defines.Add(string.Format(template, major, minor)); - options.ScriptingAPI.Defines.Add(string.Format($"{template}_OR_GREATER", major, minor)); - } } // .NET @@ -31,14 +28,15 @@ public class Scripting : EngineModule options.ScriptingAPI.Defines.Add("USE_NETCORE"); // .NET SDK - AddFrameworkDefines("NET{0}_{1}", 7, 0); // "NET7_0" and "NET7_0_OR_GREATER" - AddFrameworkDefines("NET{0}_{1}", 6, 0); - AddFrameworkDefines("NET{0}_{1}", 5, 0); + var dotnetSdk = DotNetSdk.Instance; options.ScriptingAPI.Defines.Add("NET"); - AddFrameworkDefines("NETCOREAPP{0}_{1}", 3, 1); // "NETCOREAPP3_1" and "NETCOREAPP3_1_OR_GREATER" - AddFrameworkDefines("NETCOREAPP{0}_{1}", 2, 2); - AddFrameworkDefines("NETCOREAPP{0}_{1}", 1, 1); + AddFrameworkDefines("NET{0}_{1}", dotnetSdk.Version.Major, 0); // "NET7_0" + for (int i = 5; i <= dotnetSdk.Version.Major; i++) + AddFrameworkDefines("NET{0}_{1}_OR_GREATER", dotnetSdk.Version.Major, 0); // "NET7_0_OR_GREATER" options.ScriptingAPI.Defines.Add("NETCOREAPP"); + AddFrameworkDefines("NETCOREAPP{0}_{1}_OR_GREATER", 3, 1); // "NETCOREAPP3_1_OR_GREATER" + AddFrameworkDefines("NETCOREAPP{0}_{1}_OR_GREATER", 2, 2); + AddFrameworkDefines("NETCOREAPP{0}_{1}_OR_GREATER", 1, 1); if (options.Target is EngineTarget engineTarget && engineTarget.UseSeparateMainExecutable(options)) { diff --git a/Source/Tools/Flax.Build/Build/DotNet/Builder.DotNet.cs b/Source/Tools/Flax.Build/Build/DotNet/Builder.DotNet.cs index c8e709d86..8866f7a88 100644 --- a/Source/Tools/Flax.Build/Build/DotNet/Builder.DotNet.cs +++ b/Source/Tools/Flax.Build/Build/DotNet/Builder.DotNet.cs @@ -247,7 +247,7 @@ namespace Flax.Build args.Add("/fullpaths"); args.Add("/filealign:512"); #if USE_NETCORE - args.Add("/langversion:11.0"); + args.Add($"/langversion:{dotnetSdk.CSharpLanguageVersion}"); args.Add(string.Format("/nullable:{0}", buildOptions.ScriptingAPI.CSharpNullableReferences.ToString().ToLowerInvariant())); if (buildOptions.ScriptingAPI.CSharpNullableReferences == CSharpNullableReferences.Disable) args.Add("-nowarn:8632"); // The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. diff --git a/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs b/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs index 240c95c16..fe49887ed 100644 --- a/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs +++ b/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs @@ -161,6 +161,18 @@ namespace Flax.Build /// public readonly string RuntimeVersionName; + /// + /// Maximum supported C#-language version for the SDK. + /// + public string CSharpLanguageVersion => Version.Major switch + { + 8 => "12.0", + 7 => "11.0", + 6 => "10.0", + 5 => "9.0", + _ => "7.3", + }; + /// /// Initializes a new instance of the class. /// diff --git a/Source/Tools/Flax.Build/Flax.Build.csproj b/Source/Tools/Flax.Build/Flax.Build.csproj index 9c837ee89..1837bf0ec 100644 --- a/Source/Tools/Flax.Build/Flax.Build.csproj +++ b/Source/Tools/Flax.Build/Flax.Build.csproj @@ -21,6 +21,7 @@ none true 1701;1702;8981 + LatestMajor diff --git a/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs b/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs index 77b7abf46..c678b2521 100644 --- a/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs +++ b/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs @@ -28,6 +28,7 @@ namespace Flax.Build.Projects.VisualStudio /// public override void GenerateProject(Project project, string solutionPath) { + var dotnetSdk = DotNetSdk.Instance; var csProjectFileContent = new StringBuilder(); var vsProject = (VisualStudioProject)project; @@ -73,8 +74,8 @@ namespace Flax.Build.Projects.VisualStudio csProjectFileContent.AppendLine(string.Format(" {0}", string.Join(";", allPlatforms))); // Provide default platform and configuration - csProjectFileContent.AppendLine(string.Format(" {0}", defaultConfiguration.Text)); - csProjectFileContent.AppendLine(string.Format(" {0}", defaultConfiguration.ArchitectureName)); + csProjectFileContent.AppendLine(string.Format(" {0}", defaultConfiguration.Text)); + csProjectFileContent.AppendLine(string.Format(" {0}", defaultConfiguration.ArchitectureName)); switch (project.OutputType ?? defaultTarget.OutputType) { @@ -96,7 +97,7 @@ namespace Flax.Build.Projects.VisualStudio var cacheProjectsPath = Utilities.MakePathRelativeTo(Path.Combine(Globals.Root, "Cache", "Projects"), projectDirectory); var flaxBuildTargetsPath = !string.IsNullOrEmpty(cacheProjectsPath) ? Path.Combine(cacheProjectsPath, flaxBuildTargetsFilename) : flaxBuildTargetsFilename; - csProjectFileContent.AppendLine(" net7.0"); + csProjectFileContent.AppendLine($" net{dotnetSdk.Version.Major}.{dotnetSdk.Version.Minor}"); csProjectFileContent.AppendLine(" disable"); csProjectFileContent.AppendLine(string.Format(" {0}", baseConfiguration.TargetBuildOptions.ScriptingAPI.CSharpNullableReferences.ToString().ToLowerInvariant())); csProjectFileContent.AppendLine(" false"); @@ -108,7 +109,7 @@ namespace Flax.Build.Projects.VisualStudio csProjectFileContent.AppendLine(" false"); csProjectFileContent.AppendLine(string.Format(" {0}", project.BaseName)); csProjectFileContent.AppendLine(string.Format(" {0}.CSharp", project.BaseName)); - csProjectFileContent.AppendLine(" 11.0"); + csProjectFileContent.AppendLine($" {dotnetSdk.CSharpLanguageVersion}"); csProjectFileContent.AppendLine(" 512"); //csProjectFileContent.AppendLine(" false"); // TODO: use it to reduce burden of framework libs