From e5b1a10d34d031b99136dcd15e9dacfa83da4b19 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 26 Nov 2023 20:02:08 +0200 Subject: [PATCH 1/5] Fix VSCode intellisense not finding generated C# bindings definitions --- .../Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs b/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs index 77b7abf46..fd47e3261 100644 --- a/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs +++ b/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs @@ -73,8 +73,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) { From 0bcd0154e1cea52d7ef251fa7ebe8e5bb925a225 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 26 Nov 2023 20:04:30 +0200 Subject: [PATCH 2/5] Remove wrong .NET SDK preprocessor definitions and support `NET8_0` Only `X_OR_GREATER` symbols should be defined for all versions, and only the latest detected SDK symbol should be generated. --- Source/Engine/Scripting/Scripting.Build.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) 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)) { From aab88a746df197a14f2999301170862d2595a63a Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 26 Nov 2023 20:26:53 +0200 Subject: [PATCH 3/5] Use detected .NET and C# language version in generated project files --- Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs | 12 ++++++++++++ .../Projects/VisualStudio/CSSDKProjectGenerator.cs | 5 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) 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/Projects/VisualStudio/CSSDKProjectGenerator.cs b/Source/Tools/Flax.Build/Projects/VisualStudio/CSSDKProjectGenerator.cs index fd47e3261..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; @@ -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 From ef8bb33105d57725e6f3137db21e1cc134816f6c Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 26 Nov 2023 20:27:12 +0200 Subject: [PATCH 4/5] Compile C# scripts with latest detected C# language version --- Source/Tools/Flax.Build/Build/DotNet/Builder.DotNet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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. From c577c78f3f04ea1a9f4996bb63956db483ceb88c Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 26 Nov 2023 20:47:42 +0200 Subject: [PATCH 5/5] Fix running Flax.Build with .NET 8 runtime --- Source/Tools/Flax.Build/Flax.Build.csproj | 1 + 1 file changed, 1 insertion(+) 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