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
-
-
-
-
+