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