From 5c15753985eea982e46867e42c2a02bf0baf57e0 Mon Sep 17 00:00:00 2001 From: "Jerrett D. Davis" Date: Tue, 30 Dec 2025 00:24:58 -0600 Subject: [PATCH] fix: ensure proper static initialization order for regex in .NET Framework --- src/JD.Efcpt.Build.Tasks/ResolveSqlProjAndInputs.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/JD.Efcpt.Build.Tasks/ResolveSqlProjAndInputs.cs b/src/JD.Efcpt.Build.Tasks/ResolveSqlProjAndInputs.cs index c0a101b..d012400 100644 --- a/src/JD.Efcpt.Build.Tasks/ResolveSqlProjAndInputs.cs +++ b/src/JD.Efcpt.Build.Tasks/ResolveSqlProjAndInputs.cs @@ -671,6 +671,15 @@ private static bool IsProjectFile(string? extension) extension.EqualsIgnoreCase(".csproj") || extension.EqualsIgnoreCase(".fsproj"); + // IMPORTANT: On .NET Framework, the backing field must be declared BEFORE SolutionProjectLine + // to ensure proper static initialization order. Static fields are initialized in declaration order, + // so _solutionProjectLineRegex must exist before SolutionProjectLineRegex() is called. +#if !NET7_0_OR_GREATER + private static readonly Regex _solutionProjectLineRegex = new( + "^\\s*Project\\(\"(?[^\"]+)\"\\)\\s*=\\s*\"(?[^\"]+)\",\\s*\"(?[^\"]+)\",\\s*\"(?[^\"]+)\"", + RegexOptions.Compiled | RegexOptions.Multiline); +#endif + private static readonly Regex SolutionProjectLine = SolutionProjectLineRegex(); private string ResolveFile(string overridePath, params string[] fileNames) @@ -828,9 +837,7 @@ private void NormalizeProperties() RegexOptions.Compiled | RegexOptions.Multiline)] private static partial Regex SolutionProjectLineRegex(); #else - private static readonly Regex _solutionProjectLineRegex = new( - "^\\s*Project\\(\"(?[^\"]+)\"\\)\\s*=\\s*\"(?[^\"]+)\",\\s*\"(?[^\"]+)\",\\s*\"(?[^\"]+)\"", - RegexOptions.Compiled | RegexOptions.Multiline); + // Field declaration moved above SolutionProjectLine for proper initialization order private static Regex SolutionProjectLineRegex() => _solutionProjectLineRegex; #endif } \ No newline at end of file