You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ByteSync currently runs on a single runtime version, ensuring consistency and allowing the use of modern language and runtime features uniformly:
Project
Current TFM
LangVersion
ByteSync.Client
net8.0
default
ByteSync.Common
net8.0
default
ByteSync.ServerCommon
net8.0
default
ByteSync.Functions
net8.0
default
All 7 test projects
net8.0
default
Important
The build error CS8652 in InventoryPart.cs (use of the field keyword) is a direct symptom
of this inconsistency: ByteSync.Client targets net9 but uses LangVersion=default, which maps
to C# 13 on net9 — but the field keyword only became stable in C# 14 (net10). Migrating to
net10 + C# 14 is the clean fix; alternatively, setting LangVersion=preview is a short-term
workaround.
Goal
Migrate the entire solution to .NET 10 and align all projects on C# 14 (LangVersion=default on net10), ensuring:
A uniform SDK across all projects (source + tests)
Compatibility with Azure Functions v4 on .NET 10 (isolated worker)
All NuGet dependencies updated to versions supporting net10.0
For each: update NuGet test packages (NUnit, FluentAssertions, NSubstitute, etc.) to net10-compatible versions.
Key risks & things to investigate
Warning
Azure Functions .NET 10 support — As of early 2026, the isolated worker model supports .NET 10
preview. Confirm GA availability and that Microsoft.Azure.Functions.Worker ≥ 2.x supports net10.
Warning
Avalonia net10 support — Avalonia 11.x targets net8.0 libs. Verify that referencing net8
Avalonia assemblies from a net10 consumer is supported (it generally is via compatibility shim),
or wait for an Avalonia release with net10.0 TFMs.
Caution
Microsoft.AspNetCore.SignalR.Client (currently 8.0.23) — Must be bumped to 10.x.
Possible breaking changes in SignalR connection API and hub protocols.
Note
field keyword (CS8652) — Once on net10 with LangVersion=default (C# 14), this error
disappears naturally. No code change needed in InventoryPart.cs.
Note
global.json — There is currently no global.json at the repository root. Adding one that
pins the .NET 10 SDK version is recommended for reproducible builds.
Suggested implementation order
Add a global.json at the repo root to pin the .NET 10 SDK
Migrate ByteSync.Common first (least dependencies)
Migrate ByteSync.ServerCommon (depends on Common)
Migrate ByteSync.Functions (depends on ServerCommon)
Migrate ByteSync.Client (independent from server projects)
Migrate all test projects
Run full build + all tests
Validate the Azure Functions host starts locally with net10
Verification plan
dotnet build on the full solution with zero errors
dotnet test — all test suites green
Manual smoke test: launch ByteSync.Client locally
Manual smoke test: launch ByteSync.Functions locally via func start
[feature] Migrate to .NET SDK 10
Context
ByteSync currently runs on a single runtime version, ensuring consistency and allowing the use of modern language and runtime features uniformly:
ByteSync.Clientnet8.0defaultByteSync.Commonnet8.0defaultByteSync.ServerCommonnet8.0defaultByteSync.Functionsnet8.0defaultnet8.0defaultImportant
The build error
CS8652inInventoryPart.cs(use of thefieldkeyword) is a direct symptomof this inconsistency:
ByteSync.Clienttargets net9 but usesLangVersion=default, which mapsto C# 13 on net9 — but the
fieldkeyword only became stable in C# 14 (net10). Migrating tonet10 + C# 14 is the clean fix; alternatively, setting
LangVersion=previewis a short-termworkaround.
Goal
Migrate the entire solution to .NET 10 and align all projects on C# 14 (
LangVersion=defaulton net10), ensuring:net10.0Scope of changes
Source projects (4)
[MODIFY]
ByteSync.Client.csproj<TargetFramework>net9.0</TargetFramework>→net10.0<RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>— verify net10 RIDs still valid[MODIFY]
ByteSync.Common.csproj<TargetFramework>net8.0</TargetFramework>→net10.0Microsoft.Extensions.Logging.Abstractions,Serilog,System.IO.Abstractions[MODIFY]
ByteSync.ServerCommon.csproj<TargetFramework>net8.0</TargetFramework>→net10.0Microsoft.AspNetCore.Authentication.JwtBearer(8.x → 10.x)Microsoft.Extensions.*packages (8.x → 10.x)Azure.Identity,Azure.Storage.Blobs,AWSSDK.S3,StackExchange.Redis,RedLock.netcompatibility[MODIFY]
ByteSync.Functions.csproj<TargetFramework>net8.0</TargetFramework>→net10.0<AzureFunctionsVersion>v4</AzureFunctionsVersion>— Azure Functions v4 supports .NET 10 isolated worker ✓Microsoft.Azure.Functions.Worker*packages (1.x → latest net10-compatible)Microsoft.AspNetCore.Authentication.JwtBearer(8.0.23 → 10.x)Microsoft.Azure.AppConfiguration.AspNetCore,Microsoft.Azure.SignalRMediatR,RedLock.net,StackExchange.RedisTest projects (7)
ByteSync.Client.UnitTests— net8.0 → net10.0ByteSync.Client.IntegrationTests— net8.0 → net10.0ByteSync.Common.Tests— net8.0 → net10.0ByteSync.Functions.UnitTests— net8.0 → net10.0ByteSync.Functions.IntegrationTests— net8.0 → net10.0ByteSync.ServerCommon.Tests— net8.0 → net10.0ByteSync.TestsCommon— net8.0 → net10.0For each: update NuGet test packages (NUnit, FluentAssertions, NSubstitute, etc.) to net10-compatible versions.
Key risks & things to investigate
Warning
Azure Functions .NET 10 support — As of early 2026, the isolated worker model supports .NET 10
preview. Confirm GA availability and that
Microsoft.Azure.Functions.Worker≥ 2.x supports net10.Warning
Avalonia net10 support — Avalonia 11.x targets
net8.0libs. Verify that referencing net8Avalonia assemblies from a net10 consumer is supported (it generally is via compatibility shim),
or wait for an Avalonia release with
net10.0TFMs.Caution
Microsoft.AspNetCore.SignalR.Client(currently 8.0.23) — Must be bumped to 10.x.Possible breaking changes in SignalR connection API and hub protocols.
Note
fieldkeyword (CS8652) — Once on net10 withLangVersion=default(C# 14), this errordisappears naturally. No code change needed in
InventoryPart.cs.Note
global.json— There is currently noglobal.jsonat the repository root. Adding one thatpins the .NET 10 SDK version is recommended for reproducible builds.
Suggested implementation order
global.jsonat the repo root to pin the .NET 10 SDKByteSync.Commonfirst (least dependencies)ByteSync.ServerCommon(depends on Common)ByteSync.Functions(depends on ServerCommon)ByteSync.Client(independent from server projects)Verification plan
dotnet buildon the full solution with zero errorsdotnet test— all test suites greenByteSync.ClientlocallyByteSync.Functionslocally viafunc start