Skip to content

Move FwLite and Lexbox to .NET 10#2262

Merged
rmunn merged 4 commits into
developfrom
chore/dotnet-10
May 11, 2026
Merged

Move FwLite and Lexbox to .NET 10#2262
rmunn merged 4 commits into
developfrom
chore/dotnet-10

Conversation

@rmunn
Copy link
Copy Markdown
Contributor

@rmunn rmunn commented May 11, 2026

Fixes #2227.
Fixes #2228.

Currently fails to compile with a single "extension method is ambiguous" error on AsyncEnumerable.ToArrayAsync. Opening a PR anyway so that I can get an AI code review, which might help inform me of the C# syntax I need to disambiguate these (since I don't know that particular syntax off the top of my head).

@rmunn rmunn self-assigned this May 11, 2026
@github-actions github-actions Bot added 💻 FW Lite issues related to the fw lite application, not miniLcm or crdt related 📦 Lexbox issues related to any server side code, fw-headless included labels May 11, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 11, 2026

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b3de775b-fd63-4ea0-b969-a4570992b8e0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR upgrades the entire project from .NET SDK 9.x to 10.x. Changes are applied uniformly across global build properties, project target frameworks, CI/CD workflows, Docker base images, VS Code debug configurations, build automation tasks, and documentation to maintain consistency across all development and deployment pathways.

Changes

.NET 10 Upgrade

Layer / File(s) Summary
Global Build Configuration
global.json, backend/Directory.Build.props
SDK version pinned to 10.0.100; default target framework set to net10.0 when not explicitly specified.
Project Target Frameworks
backend/WebServiceDefaults/WebServiceDefaults.csproj, backend/FwLite/FwLiteMaui/FwLiteMaui.csproj, backend/FwLite/FwLiteMaui.Tests/FwLiteMaui.Tests.csproj
TargetFramework and TargetFrameworks updated to net10.0 and net10.0-* platform variants (Android, iOS, macCatalyst, Windows).
CI/CD Pipeline Configuration
.github/workflows/fw-lite.yaml, .github/workflows/integration-test-gha.yaml, .github/workflows/integration-test.yaml, .github/workflows/lexbox-api.yaml, .github/workflows/lexbox-fw-headless.yaml
All actions/setup-dotnet steps updated to use dotnet-version: '10.x'; publish targets for Android and Windows MAUI updated to net10.0-android and net10.0-windows10.0.19041.0.
Container Build Images
backend/Dockerfile, backend/FwHeadless/Dockerfile, backend/FwHeadless/dev.Dockerfile, backend/FwLite/FwLiteWeb/Dockerfile, backend/LexBoxApi/dev.Dockerfile
Docker base and build stages upgraded to .NET 10.0 SDK and ASP.NET runtime images.
Developer Environment Configuration
.vscode/launch.json, .vscode/tasks.json
Launch configuration program paths and build task --framework arguments updated to reference net10.0 debug outputs.
Build and Test Task Configuration
backend/FwLite/Taskfile.yml
MAUI Windows/Android build and publish tasks, along with test-verified command, updated to target net10.0 frameworks.
Documentation Updates
AGENTS.md, backend/AGENTS.md, backend/FwLite/AGENTS.md, backend/FwLite/README.md
All version references and example build commands updated from .NET 9 to .NET 10.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Possibly related PRs


Suggested labels

📦 Lexbox


Suggested reviewers

  • josephmyers
  • myieye

Poem

🐰 From nine to ten, the version grows,
With dotnet SDK that swiftly flows,
Through workflows, configs, Dockerfiles too,
Each framework target shines anew! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Move FwLite and Lexbox to .NET 10' directly and clearly summarizes the primary change in the changeset, which updates multiple projects and configuration files from .NET 9 to .NET 10.
Description check ✅ Passed The description references fixing issues #2227 and #2228, which align with the changeset's objective to update FwLite and Lexbox to .NET 10, and mentions a compilation error encountered during the migration.
Linked Issues check ✅ Passed The code changes comprehensively update FwLite and Lexbox to .NET 10 across all relevant files (workflows, Dockerfiles, project files, documentation), addressing the core requirements of issues #2227 and #2228.
Out of Scope Changes check ✅ Passed All changes in the pull request are directly related to the .NET 10 migration; no unrelated modifications to other features, dependencies, or functionality are present.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/dotnet-10

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 11, 2026

C# Unit Tests

165 tests   165 ✅  19s ⏱️
 23 suites    0 💤
  1 files      0 ❌

Results for commit b529aa3.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 11, 2026

UI unit Tests

  1 files   59 suites   31s ⏱️
176 tests 176 ✅ 0 💤 0 ❌
245 runs  245 ✅ 0 💤 0 ❌

Results for commit b529aa3.

♻️ This comment has been updated with latest results.

@argos-ci
Copy link
Copy Markdown

argos-ci Bot commented May 11, 2026

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - May 11, 2026, 9:00 AM

@rmunn
Copy link
Copy Markdown
Contributor Author

rmunn commented May 11, 2026

@coderabbitai Can you recommend how to deal with the five "The call is ambiguous between the following methods or properties" errors on the five uses of .ToArrayAsync() in MiniLcmApiExtensions.cs?

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 11, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

Let me look at the file in question to give a precise recommendation.


🏁 Script executed:

#!/bin/bash
fd "MiniLcmApiExtensions.cs" --exec cat {}

Length of output: 729


Now let me check the project file and package references to pinpoint the conflict.


🏁 Script executed:

#!/bin/bash
# Find the .csproj that contains MiniLcmApiExtensions.cs
fd "MiniLcmApiExtensions.cs" --exec echo "File: {}"
# Find MiniLcm project files
fd "MiniLcm.csproj" --exec cat {}
# Check for System.Linq.Async references across the solution
rg "System\.Linq\.Async" --type xml -n

Length of output: 917


Now I have a clear picture of the root cause. Let me confirm the .NET 10 migration guidance.

@rmunn The root cause is a known .NET 10 breaking change. .NET 10 introduces the AsyncEnumerable class with a full set of LINQ extension methods for IAsyncEnumerable<T>, and this replaces the community-maintained System.Linq.Async NuGet library, potentially causing compilation errors due to ambiguities.

Your MiniLcm.csproj has a direct <PackageReference Include="System.Linq.Async" />, so both sources now provide ToArrayAsync with identical signatures — hence the five CS0121 errors.

Recommended fix: If you're upgrading to .NET 10 and your code includes a direct package reference to System.Linq.Async, remove that package reference or upgrade to version 7.0.0.

Since MiniLcm only targets net10.0 (not multi-targeting), the cleanest solution is to simply remove the package reference from backend/FwLite/MiniLcm/MiniLcm.csproj:

-    <PackageReference Include="System.Linq.Async" />

The five ToArrayAsync() calls in MiniLcmApiExtensions.cs will then resolve unambiguously to the BCL's System.Linq.AsyncEnumerable.ToArrayAsync.

One caveat: Check whether any other code in the MiniLcm project (or projects that depend on it) uses Ix.NET-specific operators like SelectAwait, WhereAwait, AnyAwaitAsync, etc. If you were relying on functionality from System.Linq.Async that has not been implemented in the new System.Linq.AsyncEnumerable, you will need to add a reference to the Ix.NET project's System.Interactive.Async package, which is the new home for these features. Given that your current code only uses plain ToArrayAsync, you are most likely safe to remove it outright.

System.Linq.Async is no longer needed when building with .NET 10, as the
AsyncEnumerable functionality it provides has been included in the
baseline .NET 10 library now. Version 7 of the NuGet package is a
transitional package, intended for projects to use while they make any
code changes their code might need (e.g. SelectAsync -> Select and so on)
@rmunn
Copy link
Copy Markdown
Contributor Author

rmunn commented May 11, 2026

rmunn added 2 commits May 11, 2026 15:44
Reinforced.Typings 1.6.5 only supported .NET versions up to 9.
Apparently we might need to do an explicit `dotnet workload install maui`
step in order to get the MAUI workload. Failing that, there's also a
Windows2025-VS2026 image we could try.
@rmunn
Copy link
Copy Markdown
Contributor Author

rmunn commented May 11, 2026

First run of dotnet test got timed out after running for 40 minutes. Is that normal? Or did moving from .NET 9 to .NET 10 slow things down significantly? I don't remember it taking that long to run the tests before the move...

@rmunn
Copy link
Copy Markdown
Contributor Author

rmunn commented May 11, 2026

It was just the build runner getting stuck. Maybe yet another Azure hiccup behind the scenes. Rerunning the tests succeeded in 13 minutes.

@myieye
Copy link
Copy Markdown
Collaborator

myieye commented May 11, 2026

@rmunn I've seen that about 5 times.
So, sadly it's somewhat recurrent, but thankfully only rarely.

Copy link
Copy Markdown
Collaborator

@myieye myieye left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🥳
Looks good to me.
It'd definitely be good to bump and cleanup nugets after this.

@rmunn rmunn merged commit d75763a into develop May 11, 2026
33 of 34 checks passed
@rmunn rmunn deleted the chore/dotnet-10 branch May 11, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💻 FW Lite issues related to the fw lite application, not miniLcm or crdt related 📦 Lexbox issues related to any server side code, fw-headless included

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update FW-Lite to dotnet 10 Update Lexbox to dotnet 10

2 participants