Skip to content

build(deps): update nuget packages and fix new analyzer findings - #1246

Open
glennawatson wants to merge 2 commits into
mainfrom
glennawatson/update-nugets
Open

glennawatson wants to merge 2 commits into
mainfrom
glennawatson/update-nugets

Conversation

@glennawatson

@glennawatson glennawatson commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Updates every NuGet dependency to its latest version and fixes what the new versions and analyzers flagged.

  • ReactiveUI.Primitives 8.2, ReactiveUI 24.3, TUnit, MinVer 8, the test platform and the StyleSharp, PerformanceSharp and SecuritySharp analyzers move to their latest releases. The remaining third-party analyzer packages are dropped and .editorconfig is synced with the new rule set.
  • HttpService makes the configured number of attempts again. Retry(n) in ReactiveUI.Primitives 8 counts total runs, matching System.Reactive, so the old retries - 1 compensation made one attempt too few.
  • Internal helpers no longer add extension markers to the public API. The image-buffer guards, bitmap decoding, SQLite cache factories, V10 migration helpers and DateTime type checks now live in internal extension classes instead of the public extension classes.
  • Size equality in Akavache.Drawing compares within a 0.001 pixel tolerance instead of exact float equality.
  • Dispose and completion flags use Interlocked int latches, so two threads can no longer both pass the check. This covers SettingsStorage and the candidate-walking observable in Core.
  • The ISO 8601 and BSON date regexes run with a match timeout, so a hostile payload cannot stall a scan.
  • PublicAPI baselines are regenerated for every target framework, including the Apple ones.
  • The rest is analyzer cleanup across src, tests, samples and benchmarks. It covers collection expressions with with(...), AggressiveInlining on forwarding members, missing <exception> docs and formatting.

Why

Brings the repository up to date with the latest package releases. It replaces the individual dependency update PRs.

Breaking changes

None to the public API.

  • Akavache.Drawing.Size now treats sizes that differ by at most 0.001 pixels in each dimension as equal.

How this was verified

The existing test suites cover the change, and the solution was also built on a Windows machine to cover the Windows desktop and Apple target frameworks.

Notes for the reviewer

Most of the diff is mechanical. Read the hand-written parts first.

  • Start with the retry fix in HttpService.MakeWebRequest. It is the only behaviour change a consumer could notice apart from Size.
  • Hand-written: HttpService.cs, Size.cs, FirstMatchFromCandidatesObservable.cs (int latch), SettingsStorage.cs, and the new internal extension classes. Those are IsolatedStorageFileExtensions, DateTimeTypeExtensions, ImageBufferExtensions, BitmapBufferExtensions, SqliteCacheNameExtensions, EncryptedSqliteCacheNameExtensions and V10CacheExtensions.
  • SqliteCacheNameExtensions.cs is excluded from the EncryptedSqlite3 projects, like AkavacheBuilderExtensions.cs, because they glob the Sqlite3 sources.
  • The HashCode polyfill keeps a suppression on its throwing Equals methods, because it mirrors System.HashCode.
  • Mechanical, safe to skim: copyright headers, MethodImpl attributes, collection expressions, doc additions and DebuggerDisplay attributes.

Checklist

  • I have read the Contribute guide
  • The PR title follows Conventional Commits
  • Tests cover this change, or the summary says why they do not
  • New or changed public API has XML documentation

- Bump ReactiveUI.Primitives to 8.2, ReactiveUI to 24.3, TUnit, MinVer 8, PublicApiSharp 2.0.1 and the StyleSharp/PerformanceSharp/SecuritySharp analyzers to 5.1.
- Drop the remaining third-party analyzer packages; sync .editorconfig with the new rule set.
- Fix HttpService retries: Primitives 8 Retry(n) counts total runs, so the old "retries - 1" made one attempt too few.
- Move internal-only helpers into internal extension classes so they add no public extension markers.
- Use int latches with Interlocked for dispose/done flags, collection expressions with with(...), and AggressiveInlining on forwarding members.
- Compare Size dimensions within a 0.001 pixel tolerance instead of exact float equality.
- Add a match timeout to the ISO 8601 and BSON date regexes.
- Regenerate the PublicAPI baselines and add missing exception docs and other analyzer cleanups across src, tests, samples and benchmarks.
@glennawatson
glennawatson force-pushed the glennawatson/update-nugets branch from 5b365b7 to b8fcedc Compare September 25, 2026 05:38
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
7.2% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

This branch has not been deployed

No deployments
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