Skip to content

Drop old runtimes: target only .NET 8 and .NET 9#210

Draft
dkropachev wants to merge 1 commit into
masterfrom
next-major/drop-old-runtimes
Draft

Drop old runtimes: target only .NET 8 and .NET 9#210
dkropachev wants to merge 1 commit into
masterfrom
next-major/drop-old-runtimes

Conversation

@dkropachev

@dkropachev dkropachev commented Mar 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Drop netstandard2.0, .NET 6, and .NET 7 targets — the driver now targets .NET 8.0 and .NET 9.0 only
  • Replace custom Utils.ReadExactly() with Stream.ReadExactly() available in .NET 8+
  • Fix Array.Reverse() ambiguity with MemoryExtensions on .NET 8+
  • Fix DynamicInvoke and ReadOnlySpan<T> issues in LINQ expression evaluation on .NET 9
  • Remove obsolete PlatformHelper methods (GetTargetFramework, RuntimeSupportsCloudTlsSettings) that are unnecessary on .NET 8+
  • Simplify CloudSupportedAttribute now that cloud TLS is always supported
  • Normalize all project files to use canonical net8.0/net9.0 target framework notation
  • Add net8 + LATEST entry to CI matrix
  • Fix missing trailing newlines in .gitignore and PlatformHelper.cs

Breaking changes

  • Minimum runtime: .NET 8.0 (was .NET 6.0 / netstandard2.0)
  • SslProtocols default: Changed from SslProtocols.Tls (TLS 1.0) to SslProtocols.None (OS-negotiated, typically TLS 1.2+). Servers that only support TLS 1.0 will need explicit configuration.

Test plan

  • CI passes on both net8.0 and net9.0 targets
  • Example projects build successfully with canonical TFM notation
  • SSL/TLS connections work with the new SslProtocols.None default
  • Integration tests pass with Scylla LATEST and LTS-PRIOR

Assert.AreEqual(".NETStandard,Version=v2.0", framework);
Assert.IsNotNull(framework);
Assert.IsTrue(
framework.StartsWith(".NETCoreApp,Version=v"),
private readonly static Logger _logger = new Logger(typeof(SSLOptions));
private RemoteCertificateValidationCallback _remoteCertValidationCallback = ValidateServerCertificate;
private SslProtocols _sslProtocol = SslProtocols.Tls;
private SslProtocols _sslProtocol = SslProtocols.None;
@dkropachev
dkropachev force-pushed the next-major/drop-old-runtimes branch 2 times, most recently from 9f4d70b to c131f4c Compare March 23, 2026 19:55
@dkropachev
dkropachev marked this pull request as draft March 23, 2026 19:55
@dkropachev
dkropachev force-pushed the next-major/drop-old-runtimes branch from df3ae55 to 6f2e91b Compare March 24, 2026 02:05
- Remove netstandard2.0, net6.0, net7.0 targets; keep only net8.0/net9.0
- Cache re-bound delegate in TypeConverter.InvokeConverter to avoid
  per-call Delegate.CreateDelegate overhead on the hot path
- Add iteration bound (max 10) to IsByRefLike unwrap loop in
  CqlExpressionVisitor for defensive safety
- Use pattern-match variable in DropNullableConversion for consistency
- Remove stale BuildCoreOnly paragraph from CONTRIBUTING.md
- Bump AssemblyVersion/FileVersion to 4.0.0.0
- Replace deprecated ClassicAssert with modern NUnit Assert.That API
- Update README and docs to reflect net8.0/net9.0 targets
@dkropachev
dkropachev force-pushed the next-major/drop-old-runtimes branch from 6f2e91b to 9740ed7 Compare March 24, 2026 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant