CoreRemoting 1.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package CoreRemoting --version 1.2.2
                    
NuGet\Install-Package CoreRemoting -Version 1.2.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CoreRemoting" Version="1.2.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CoreRemoting" Version="1.2.2" />
                    
Directory.Packages.props
<PackageReference Include="CoreRemoting" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CoreRemoting --version 1.2.2
                    
#r "nuget: CoreRemoting, 1.2.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CoreRemoting@1.2.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CoreRemoting&version=1.2.2
                    
Install as a Cake Addin
#tool nuget:?package=CoreRemoting&version=1.2.2
                    
Install as a Cake Tool

Easy to use Remoting library for .NET Core and .NET Framework

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on CoreRemoting:

Package Downloads
CoreRemoting.Authentication.WindowsAuthProvider

Windows user authentication provider for CoreRemoting

CoreRemoting.Authentication.LinuxPamAuthProvider

Linux user authentication provider for CoreRemoting

CoreRemoting.Authentication.GenericOsAuthProvider

Generic OS user authentication provider for CoreRemoting

GitHub repositories

This package is not used by any popular GitHub repositories.

New Features and Enhancements
- Added support for LINQ expression return values in remote calls.
- Full ValueTask handling, including new unit tests.
- Introduced experimental QUIC channel (requires .NET 9.0, Windows only) with lock‑protected send/receive and a shared QuicTransport base class.
- New async primitives: AsyncCountdownEvent, AsyncManualResetEvent, AsyncReaderWriterLock, AsyncLock and AsyncDisposable helpers (based on ideas by Stephen Toub and Stephen Cleary).
- Thread‑safe BsonReferenceResolver with reference‑counting to avoid deserialization problems.
- Customizable thread‑pool for event handlers to improve remote‑event processing.
- ServiceProxy now includes ServiceInterfaceType and ServiceName properties.
- Remote event handling improvements: subscription and un‑subscription support for non‑singleton server components, plus an EventStub class ported from the Zyan Framework.
- Session and proxy utilities: ClientConfig can specify a custom proxy builder; all CreateProxy overloads now guarantee identical results.
- Authentication enhancements: new BeginCall event, server Logon/Logoff events, and earlier authentication checks in the server pipeline.
- Channel upgrades:
 * WebSocketSharp moved to a dedicated project and external package dependency removed.
 * New WebsocketSharpServerChannel and WebsocketSharpClientChannel classes.
 * Added System‑Net‑WebSockets client channel.
 * Refactored TCP handshake sequence, added configurable MaxMessageSize.
 * WatsonTcp v6.0.10 now handles partial headers and disposal race conditions correctly.
- Support for processing messages larger than 2 MiB.
- DataTable serialization added with corresponding unit test.

Bug Fixes and Stability Improvements
- Fixed numerous race conditions, especially around disconnect and dispose operations in TcpClientChannel, WatsonTcpClient and RemotingClient.
- Resolved memory leaks in ClientRpcContext, the internal TCP client, and SmallMemoryStream handling.
- Improved serialization/deserialization handling for DateTimeKind, TimeSpan, BSON for common .NET types, and non‑serializable return values.
- Corrected exception propagation so remote exceptions deserialize reliably; constructors now throw RemoteInvocationException on failure.
- Fixed counter bugs that caused mismatched pending‑message counts.
- Prevented duplicate RPC calls after session disposal or when the client is disconnected.
- Fixed WebSocket thread‑safety issues on Windows for SendAsync and ReceiveAsync.
- Resolved message‑order problems in the TCP handshake (issues #55 and #148).
- Eliminated unhandled exceptions in KeepSessionAliveTimerOnElapsed and other background tasks.
- Fixed authentication failure handling: client no longer stays connected after a failed login; proper disconnect logic added.
- Cleaned up compiler warnings related to missing XML comments, unsafe Task.Result usage, and obsolete IDisposable implementations (now IAsyncDisposable).
- Updated QUIC channel removal handling and solution structure.
- Added missing unit tests for async RPC processing, event handling, DI containers, and race‑condition detection.

Performance and Code Quality Improvements
- Introduced granular lock objects and AsyncLock to reduce contention.
- Replaced wait‑handles with TaskCompletionSource‑based synchronization.
- Added locking for send/receive in QUIC and TCP channels to avoid race conditions.
- Implemented reference‑counter logic for BSON resolver, reducing garbage collection pressure.
- Added SmallBlockMemoryStream to lower allocations when handling large payloads.
- Cleaned up unreachable code, namespace indentation and duplicated warnings.
- Updated CI matrix to include Windows‑latest detection and OS matrix for Linux and Windows testing.

Documentation and Miscellaneous
- Added extensive XML comments and enabled ConfigureAwait(false) compliance checks.
- Provided release notes for many tracked issues (e.g., #92, #95, #100, #105, #108, #116, #120, #134, #141, #153, #155, #156, #163, #168, #192, #203).
- Updated CodeQL workflow to the latest version.
- Included .NET 8.0 as a separate target framework for examples and tests.