From 0bdbc78aa240705be6bbe20207173fb4a04174c2 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Thu, 19 Feb 2026 04:09:51 +0000 Subject: [PATCH] chore: consolidate 9 Roslyn-versioned project duplicates into shared props Reduce duplication across the 9 Roslyn-versioned analyzer/generator projects by centralizing shared configuration: - Merge three near-identical Directory.Build.props PropertyGroup blocks into one that dynamically derives AssemblyName, RootNamespace, and RoslynVersion from the project name using MSBuild regex functions - Consolidate Analyzer.props, AspNetCore.Analyzer.props, and SourceGenerator.props into a single Roslyn.props that uses the derived _BaseProjectName property to link source files from the correct base project - Remove explicit RoslynVersion from all 9 .csproj files (now derived) - Remove Folder items from SourceGenerator .csproj files (moved to Roslyn.props) The 9 .csproj files are now minimal 3-line stubs that only import Roslyn.props. Adding a new Roslyn version target requires only creating a new directory with a stub .csproj -- no other files need updating. --- Analyzer.props | 10 -------- AspNetCore.Analyzer.props | 12 ---------- Directory.Build.props | 24 ++++++------------- Roslyn.props | 23 ++++++++++++++++++ SourceGenerator.props | 9 ------- .../TUnit.Analyzers.Roslyn414.csproj | 6 +---- .../TUnit.Analyzers.Roslyn44.csproj | 6 +---- .../TUnit.Analyzers.Roslyn47.csproj | 6 +---- ...Unit.AspNetCore.Analyzers.Roslyn414.csproj | 6 +---- ...TUnit.AspNetCore.Analyzers.Roslyn44.csproj | 6 +---- ...TUnit.AspNetCore.Analyzers.Roslyn47.csproj | 6 +---- ...Unit.Core.SourceGenerator.Roslyn414.csproj | 12 +--------- ...TUnit.Core.SourceGenerator.Roslyn44.csproj | 12 +--------- ...TUnit.Core.SourceGenerator.Roslyn47.csproj | 12 +--------- 14 files changed, 39 insertions(+), 111 deletions(-) delete mode 100644 Analyzer.props delete mode 100644 AspNetCore.Analyzer.props delete mode 100644 SourceGenerator.props diff --git a/Analyzer.props b/Analyzer.props deleted file mode 100644 index ba04867b64..0000000000 --- a/Analyzer.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/AspNetCore.Analyzer.props b/AspNetCore.Analyzer.props deleted file mode 100644 index 5036184620..0000000000 --- a/AspNetCore.Analyzer.props +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/Directory.Build.props b/Directory.Build.props index 174a023dc6..88c3d58f78 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -23,24 +23,14 @@ build/netstandard2.0 - + + + <_BaseProjectName>$([System.Text.RegularExpressions.Regex]::Replace($(MSBuildProjectName), '\.Roslyn\d+$', '')) + <_RoslynDigits>$([System.Text.RegularExpressions.Regex]::Match($(MSBuildProjectName), 'Roslyn(\d+)$').Groups[1].Value) + $([System.Text.RegularExpressions.Regex]::Replace($(_RoslynDigits), '^(\d)', '$1.')) netstandard2.0 - TUnit.Analyzers - TUnit.Analyzers - false - true - - - netstandard2.0 - TUnit.Core.SourceGenerator - TUnit.Core.SourceGenerator - false - true - - - netstandard2.0 - TUnit.AspNetCore.Analyzers - TUnit.AspNetCore.Analyzers + $(_BaseProjectName) + $(_BaseProjectName) false true diff --git a/Roslyn.props b/Roslyn.props index 9a3940c423..356432b6ba 100644 --- a/Roslyn.props +++ b/Roslyn.props @@ -6,4 +6,27 @@ + + + + + + + + + + + + + + + + + + + + CodeGenerators\Writers\Hooks + + + diff --git a/SourceGenerator.props b/SourceGenerator.props deleted file mode 100644 index a5b1600416..0000000000 --- a/SourceGenerator.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/TUnit.Analyzers.Roslyn414/TUnit.Analyzers.Roslyn414.csproj b/TUnit.Analyzers.Roslyn414/TUnit.Analyzers.Roslyn414.csproj index 88b8220fa7..241958b3ba 100644 --- a/TUnit.Analyzers.Roslyn414/TUnit.Analyzers.Roslyn414.csproj +++ b/TUnit.Analyzers.Roslyn414/TUnit.Analyzers.Roslyn414.csproj @@ -1,9 +1,5 @@  - - 4.14 - - - + diff --git a/TUnit.Analyzers.Roslyn44/TUnit.Analyzers.Roslyn44.csproj b/TUnit.Analyzers.Roslyn44/TUnit.Analyzers.Roslyn44.csproj index 9c5407b008..c9b05ccfa4 100644 --- a/TUnit.Analyzers.Roslyn44/TUnit.Analyzers.Roslyn44.csproj +++ b/TUnit.Analyzers.Roslyn44/TUnit.Analyzers.Roslyn44.csproj @@ -1,9 +1,5 @@  - - 4.4 - - - + \ No newline at end of file diff --git a/TUnit.Analyzers.Roslyn47/TUnit.Analyzers.Roslyn47.csproj b/TUnit.Analyzers.Roslyn47/TUnit.Analyzers.Roslyn47.csproj index 883378ea5f..c9b05ccfa4 100644 --- a/TUnit.Analyzers.Roslyn47/TUnit.Analyzers.Roslyn47.csproj +++ b/TUnit.Analyzers.Roslyn47/TUnit.Analyzers.Roslyn47.csproj @@ -1,9 +1,5 @@  - - 4.7 - - - + \ No newline at end of file diff --git a/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj b/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj index a37eda453b..73b4ec1b8c 100644 --- a/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj +++ b/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj @@ -1,9 +1,5 @@ - - 4.14 - - - + diff --git a/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj b/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj index 5df2a50bec..73b4ec1b8c 100644 --- a/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj +++ b/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj @@ -1,9 +1,5 @@ - - 4.4 - - - + diff --git a/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj b/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj index 5694a2f514..73b4ec1b8c 100644 --- a/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj +++ b/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj @@ -1,9 +1,5 @@ - - 4.7 - - - + diff --git a/TUnit.Core.SourceGenerator.Roslyn414/TUnit.Core.SourceGenerator.Roslyn414.csproj b/TUnit.Core.SourceGenerator.Roslyn414/TUnit.Core.SourceGenerator.Roslyn414.csproj index 9e5718edba..62ac127eef 100644 --- a/TUnit.Core.SourceGenerator.Roslyn414/TUnit.Core.SourceGenerator.Roslyn414.csproj +++ b/TUnit.Core.SourceGenerator.Roslyn414/TUnit.Core.SourceGenerator.Roslyn414.csproj @@ -1,15 +1,5 @@  - - 4.14 - - - - - CodeGenerators\Writers\Hooks - - - - + diff --git a/TUnit.Core.SourceGenerator.Roslyn44/TUnit.Core.SourceGenerator.Roslyn44.csproj b/TUnit.Core.SourceGenerator.Roslyn44/TUnit.Core.SourceGenerator.Roslyn44.csproj index 109e28962a..62ac127eef 100644 --- a/TUnit.Core.SourceGenerator.Roslyn44/TUnit.Core.SourceGenerator.Roslyn44.csproj +++ b/TUnit.Core.SourceGenerator.Roslyn44/TUnit.Core.SourceGenerator.Roslyn44.csproj @@ -1,15 +1,5 @@  - - 4.4 - - - - - CodeGenerators\Writers\Hooks - - - - + diff --git a/TUnit.Core.SourceGenerator.Roslyn47/TUnit.Core.SourceGenerator.Roslyn47.csproj b/TUnit.Core.SourceGenerator.Roslyn47/TUnit.Core.SourceGenerator.Roslyn47.csproj index c4571db44e..62ac127eef 100644 --- a/TUnit.Core.SourceGenerator.Roslyn47/TUnit.Core.SourceGenerator.Roslyn47.csproj +++ b/TUnit.Core.SourceGenerator.Roslyn47/TUnit.Core.SourceGenerator.Roslyn47.csproj @@ -1,15 +1,5 @@  - - 4.7 - - - - - CodeGenerators\Writers\Hooks - - - - +