From 2b20373597f89c1609114bcae7d0368f4ee65082 Mon Sep 17 00:00:00 2001 From: Stuart Turner Date: Tue, 6 Oct 2026 20:44:16 -0500 Subject: [PATCH 1/2] Properly Multi-target Roslyn --- .github/workflows/build.yml | 2 + .github/workflows/release.yml | 5 ++ Directory.Build.props | 2 +- Directory.Packages.props | 31 ++------ .../Immediate.Cache.Analyzers.csproj | 32 ++++++-- .../Immediate.Cache.Generators.csproj | 47 ++++++++---- src/Immediate.Cache/Immediate.Cache.csproj | 74 +++++++++++++----- .../ApplicationCacheTests.cs | 6 +- .../Immediate.Cache.FunctionalTests.csproj | 25 ++++++- .../Immediate.Cache.Tests.csproj | 75 +++++++++++-------- 10 files changed, 194 insertions(+), 105 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ff21958..0baf87a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,6 +17,8 @@ jobs: steps: - uses: actions/checkout@v7 + with: + fetch-depth: '0' - name: Setup .NET uses: actions/setup-dotnet@v6 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7f643f7..3bab96b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,6 +32,9 @@ jobs: dotnet-version: | 11.0.x + - name: Restore tools + run: dotnet tool restore + - name: Restore dependencies run: dotnet restore - name: Build @@ -39,6 +42,8 @@ jobs: - name: Package run: dotnet pack -c Release --no-build --property:PackageOutputPath=../../nupkgs + - name: Validate Package + run: dotnet tool run dotnet-validate -- package local ./nupkgs/*.nupkg - name: NuGet login (OIDC → temp API key) uses: NuGet/login@v1 diff --git a/Directory.Build.props b/Directory.Build.props index 563c9f9..af3ca34 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - net8.0;net9.0;net10.0;net11.0 + net8.0;net10.0;net11.0 latest enable diff --git a/Directory.Packages.props b/Directory.Packages.props index b762140..07f8993 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,8 +5,7 @@ - - + @@ -16,7 +15,7 @@ - + @@ -26,18 +25,9 @@ - - - - - - - - - - + @@ -53,28 +43,21 @@ - - + + - + - - - - - - - @@ -82,7 +65,7 @@ - + diff --git a/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj b/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj index 75b20ce..4f21b1a 100644 --- a/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj +++ b/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj @@ -1,18 +1,36 @@ - + - netstandard2.0;net10.0 - true - true + roslyn4.8;roslyn5.0;roslyn5.9 + true + true - + - - + + + + .NETStandard + v2.0 + .NETStandard,Version=v2.0 + + + + .NETStandard + v2.0 + .NETStandard,Version=v2.0 + + + + .NETStandard + v2.0 + .NETStandard,Version=v2.0 + + diff --git a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj index e726b66..9a95e21 100644 --- a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj +++ b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj @@ -1,49 +1,66 @@ - netstandard2.0;net10.0 - true - true - $(NoWarn);CA1716 + roslyn4.8;roslyn5.0;roslyn5.9 + true + true - + - - + + - - - + + + - + - + true $(DefineConstants);SCRIBAN_NO_ASYNC - + - + $(GetTargetPathDependsOn);GetDependencyTargetPaths - + + + .NETStandard + v2.0 + .NETStandard,Version=v2.0 + + + + .NETCoreApp + v10.0 + .NETCoreApp,Version=v10.0 + + + + .NETCoreApp + v10.0 + .NETCoreApp,Version=v10.0 + + diff --git a/src/Immediate.Cache/Immediate.Cache.csproj b/src/Immediate.Cache/Immediate.Cache.csproj index bb01835..7767438 100644 --- a/src/Immediate.Cache/Immediate.Cache.csproj +++ b/src/Immediate.Cache/Immediate.Cache.csproj @@ -3,6 +3,9 @@ true false + + true + 2.0.0 @@ -22,14 +25,8 @@ - - - - - - - - + + - - + - - - - + - + + + + + + + + + + + + + + roslyn4.8 + roslyn5.0 + roslyn5.9 + + + + + TargetFramework=$(RoslynVersion) + + + + TargetFramework=$(RoslynVersion) + + + diff --git a/tests/Immediate.Cache.FunctionalTests/ApplicationCacheTests.cs b/tests/Immediate.Cache.FunctionalTests/ApplicationCacheTests.cs index bdfc2ca..8d06170 100644 --- a/tests/Immediate.Cache.FunctionalTests/ApplicationCacheTests.cs +++ b/tests/Immediate.Cache.FunctionalTests/ApplicationCacheTests.cs @@ -1,6 +1,6 @@ +using System.Globalization; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; -using Xunit; namespace Immediate.Cache.FunctionalTests; @@ -29,7 +29,7 @@ public async Task GetValueCachesValue() Assert.True(response.ExecutedHandler); var memoryCache = _serviceProvider.GetRequiredService(); - Assert.True(memoryCache.TryGetValue($"GetValue(query: {request.Value})", out var _)); + Assert.True(memoryCache.TryGetValue(string.Create(CultureInfo.InvariantCulture, $"GetValue(query: {request.Value})"), out var _)); } [Fact] @@ -40,7 +40,7 @@ public async Task SetValueCachesValue() cache.SetValue(request, new(4, ExecutedHandler: false)); var memoryCache = _serviceProvider.GetRequiredService(); - Assert.True(memoryCache.TryGetValue($"GetValue(query: {request.Value})", out var _)); + Assert.True(memoryCache.TryGetValue(string.Create(CultureInfo.InvariantCulture, $"GetValue(query: {request.Value})"), out var _)); var response = await cache.GetValue(request, TestContext.Current.CancellationToken); diff --git a/tests/Immediate.Cache.FunctionalTests/Immediate.Cache.FunctionalTests.csproj b/tests/Immediate.Cache.FunctionalTests/Immediate.Cache.FunctionalTests.csproj index d3ea781..6848c8c 100644 --- a/tests/Immediate.Cache.FunctionalTests/Immediate.Cache.FunctionalTests.csproj +++ b/tests/Immediate.Cache.FunctionalTests/Immediate.Cache.FunctionalTests.csproj @@ -4,7 +4,12 @@ Exe + + + + + @@ -12,9 +17,23 @@ - - - + + + + + roslyn4.8 + roslyn5.0 + roslyn5.9 + + + + + TargetFramework=$(RoslynVersion) + + + + TargetFramework=$(RoslynVersion) + diff --git a/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj b/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj index 104cf1f..b726e7c 100644 --- a/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj +++ b/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj @@ -1,61 +1,72 @@ - Exe - <_SkipUpgradeNetAnalyzersNuGetWarning>true + Exe + <_SkipUpgradeNetAnalyzersNuGetWarning>true + + + + runtime-async=on - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - + - + - - - - + + + roslyn4.8 + roslyn5.0 + roslyn5.9 + + - + + TargetFramework=$(RoslynVersion) + + - - + + TargetFramework=$(RoslynVersion) + + - + + + + + + From d6c6bdbe296882df38c7922a1528886638ed6e37 Mon Sep 17 00:00:00 2001 From: Stuart Turner Date: Tue, 6 Oct 2026 20:58:35 -0500 Subject: [PATCH 2/2] Fix derp --- .../Immediate.Cache.Generators.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj index 9a95e21..2b82d27 100644 --- a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj +++ b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj @@ -41,7 +41,7 @@ - +