Guidance for AI agents and contributors working in this repository.
ASP.NET SignalR (Microsoft.AspNet.SignalR) is a real-time web library for .NET Framework apps using System.Web or OWIN/Katana. It lets servers push content to connected clients (browsers and .NET clients) over WebSockets, Server-Sent Events, Forever Frame, or long polling.
This is not ASP.NET Core SignalR. For ASP.NET Core, see aspnet/AspNetCore SignalR.
| Fact | Detail |
|---|---|
| Upstream | SignalR/SignalR |
| This remote | RWS/SignalR (fork) |
| Product status | Maintenance mode — no new features; critical/security fixes only (announcement) |
| License | Apache 2.0 (LICENSE.txt) |
| Docs | ASP.NET SignalR docs |
| Consumer install | Install-Package Microsoft.AspNet.SignalR |
| Latest NuGet stable | 2.4.3 (nuget.org). Repo version.props may be ahead (e.g. 2.4.4-preview1) |
src/ # Shipping libraries and utilities
samples/ # Sample host apps
test/ # Unit, functional, and JS client tests
build/ # MSBuild props/targets, signing, localization, symbols
.vsts-pipelines/ # Azure DevOps CI (public + official/1ES)
eng/ # Shared pipeline templates (SBOM, retain-build)
artifacts/ # Build output (gitignored)
| Project | Role |
|---|---|
Microsoft.AspNet.SignalR |
Meta package (SystemWeb + JS client) |
Microsoft.AspNet.SignalR.Core |
Server core (hubs, transports, messaging) |
Microsoft.AspNet.SignalR.SystemWeb |
ASP.NET / System.Web host integration |
Microsoft.AspNet.SignalR.SelfHost |
OWIN self-host meta package |
Microsoft.AspNet.SignalR.Client |
.NET client (net40, net45, netstandard1.3, netstandard2.0) |
Microsoft.AspNet.SignalR.JS |
Browser JS client (jquery.signalR*.js) |
Microsoft.AspNet.SignalR.Redis / StackExchangeRedis |
Redis scale-out |
Microsoft.AspNet.SignalR.SqlServer |
SQL Server scale-out |
Microsoft.AspNet.SignalR.ServiceBus / ServiceBus3 |
Azure Service Bus scale-out |
Microsoft.AspNet.SignalR.Utils |
signalr.exe helper (packable) |
Non-shipping / excluded from pack: Crank, Stress, StressServer.
Versioning is centralized in version.props (VersionPrefix / VersionSuffix / PackageVersion). Dependencies are pinned in build/dependencies.props.
- Windows for a full product build (signing, loc, many tests, VS tooling).
build.shexists but the product targets .NET Framework and CI is Windows-only. - Visual Studio 2017+ (solution note: VS 2017; CI agents use VS 2019 Enterprise with Web workload).
- .NET Framework targeting packs / MSBuild (net45 / net472 as used by projects and tests).
- Node.js (CI uses 16.x) for JS client tests under
test/Microsoft.AspNet.SignalR.Client.JS.Tests. - Network access to NuGet feeds in
NuGet.config(dotnet-public,myget-legacyon Azure DevOps).
Build orchestration uses KoreBuild (ASP.NET BuildTools, channel release/2.1 per korebuild.json / korebuild-lock.txt), invoked via run.ps1 / run.sh.
From the repo root on Windows:
build.cmdOr explicitly:
build.cmd -ci /p:Configuration=ReleaseCross-platform entry (still KoreBuild; limited usefulness for full Framework builds):
./build.shbuild.cmd / build.sh run the KoreBuild default-build command (restore → build → package → test).
Pass properties after the script name:
REM Release configuration (CI default)
build.cmd /p:Configuration=Release
REM Skip tests if you only need binaries/packages (when supported by KoreBuild targets)
build.cmd /t:Package /p:Configuration=Release
REM Official-style attributes (Company/Copyright); CI sets OfficialBuild=true
build.cmd /p:OfficialBuild=true /p:Configuration=Release
REM Final release version shaping (see version.props)
build.cmd /p:IsFinalBuild=true /p:Configuration=ReleaseHistorically, packaging without the full test suite has been done with a Package-focused target (e.g. /t:BuildPackages or /t:Package depending on KoreBuild version). Prefer /t:Package if BuildPackages is unknown; inspect KoreBuild help with:
.\run.ps1 help- Open
Microsoft.AspNet.SignalR.slnin VS 2017+. - Ignore unloadable legacy projects (UWP/Silverlight-era) if present.
- Build the project you need (e.g.
Microsoft.AspNet.SignalR.Client).
Useful for local debugging with matching PDBs without a full KoreBuild run.
| Output | Path |
|---|---|
| Assemblies | artifacts/$(Configuration)/bin/<Project>/ |
| NuGet packages | artifacts/$(Configuration)/packages/ |
| Symbols | artifacts/$(Configuration)/symbols/ |
| Intermediate | artifacts/obj/ |
| Logs / TRX | artifacts/logs/ (CI moves .binlog here) |
- Default test TFM:
net472(Directory.Build.props). - .NET tests run via KoreBuild as part of
default-build. - JS browser tests:
npm cithennpm testintest/Microsoft.AspNet.SignalR.Client.JS.Tests(wired asRunBrowserTestsinbuild/repo.targets). CI installs Chrome and Node 16. - UWP client tests are excluded from KoreBuild (
build/repo.props).
Functional/integration tests may require IIS / SQL / other Windows features available on the VS Enterprise CI image.
| Pipeline | File | Purpose |
|---|---|---|
| Public | .vsts-pipelines/builds/ci-public.yml |
PR/CI validation; SkipCodeSign: true |
| Official | .vsts-pipelines/builds/ci-official.yml |
Signed, localized Release build (1ES); OfficialBuild, Localize, MicroBuild signing |
Shared steps: .vsts-pipelines/templates/signalr-build.yml → .\build.cmd -ci /p:Configuration=Release.
Official extras: Component Governance, MicroBuild localization + signing plugins, optional SBOM + retain when IsFinalBuild=true.
Triggers typically cover main, release/*, vsts/*.
NuGet packages under IDs such as:
Microsoft.AspNet.SignalRMicrosoft.AspNet.SignalR.CoreMicrosoft.AspNet.SignalR.SystemWebMicrosoft.AspNet.SignalR.ClientMicrosoft.AspNet.SignalR.JSMicrosoft.AspNet.SignalR.SelfHost- Scale-out:
Redis,StackExchangeRedis,SqlServer,ServiceBus,ServiceBus3 Microsoft.AspNet.SignalR.Utils
Official Microsoft releases go to nuget.org. main historically tracks the shipped nuget.org release; releases are also GitHub-tagged.
Version rules (version.props):
- Dev builds:
$(VersionPrefix)-$(VersionSuffix)-$(BuildNumber)(e.g.2.4.4-preview1-t000). - Final RTM: set
IsFinalBuild=trueandVersionSuffix=rtm→ plainVersionPrefix. - Final non-RTM:
IsFinalBuild=true→$(VersionPrefix)-$(VersionSuffix)-final.
Bump VersionPrefix / VersionSuffix in version.props before a release cut.
-
Build packages (Release recommended):
build.cmd /p:Configuration=Release
-
Packages appear in
artifacts/Release/packages/. -
Push to a feed you control (do not push Microsoft-signed IDs to nuget.org unless you are the official publisher):
nuget push artifacts\Release\packages\*.nupkg -Source https://your-feed -ApiKey <key>
or:
dotnet nuget push artifacts\Release\packages\*.nupkg --source https://your-feed --api-key <key>
For a fork/private fork republish, consider changing package IDs / authors in project metadata so packages do not collide with Microsoft’s Microsoft.AspNet.SignalR* on nuget.org.
- Land changes on the release branch /
mainper team process. - Run the official pipeline with signing (
SignType=real), localization (Localize=true), andOfficialBuild=true. - Queue with
IsFinalBuild=truewhen cutting the shipping bits (enables final version shaping, SBOM, retain). - Publish signed
.nupkgartifacts from the pipeline drop to nuget.org (and any internal feeds) using Microsoft’s release tooling/process. - Tag the release in GitHub and update release notes (
PackageReleaseNotespoints at GitHub releases).
Signing uses MicroBuild + build/sign.proj / SignToolData*.json. Local unsigned builds skip MicroBuild when plugins are absent (LocateMicroBuild in build/repo.targets).
Reference built assemblies from artifacts/$(Configuration)/bin/..., or add a local NuGet source:
<!-- NuGet.config -->
<add key="signalr-local" value="path\to\artifacts\Release\packages" />- Prefer minimal, maintenance-safe changes (bug/security fixes). Do not add features unless explicitly requested.
- Keep ASP.NET SignalR vs ASP.NET Core SignalR clear in docs and comments.
- Prefer editing
version.propsandbuild/dependencies.propsover scattering version numbers. - Treat warnings as errors (
TreatWarningsAsErrors). - Strong-name / delay-sign behavior differs for CI (
DelaySign/SignAssemblywhenCI=true); do not check in private keys. - JS client sources live under
src/Microsoft.AspNet.SignalR.JS/; generated/minified scripts are build outputs. - Samples under
samples/illustrate hosting patterns; product code changes belong insrc/. - Do not commit
artifacts/,bin/,obj/, or generatedjquery.signalR*.jsoutputs. - Security reports: follow
SECURITY.md(MSRC), not public issues.
REM Clone & build
git clone https://github.com/RWS/SignalR.git
cd SignalR
build.cmd
REM Release packages only-oriented run (adjust target if needed)
build.cmd /p:Configuration=Release /t:Package
REM KoreBuild help
run.ps1 help