Versioning and package naming
Arc4u follows semantic versioning since version 8.0.0, and every package of a release has
the same version number. With Arc4u 9, the packages were also renamed from
Arc4u.Standard.* to Arc4u.*. This page explains both, so that you can tell which
packages and versions belong together.
How it works
Version numbers
Since 8.0.0, a version is MAJOR.MINOR.PATCH:
| Part | Changes when |
|---|---|
MAJOR |
A release contains breaking changes. |
MINOR |
A release adds features, with bug fixes. |
PATCH |
A release contains bug fixes only. |
Previews carry a -previewNN suffix, for example 9.0.0-preview37. Arc4u 9 is available only
as previews so far, which is why the install commands in this documentation use
--prerelease:
dotnet add package Arc4u.Caching --prerelease
All the packages are built and published together, with one version number passed to the whole build. A package therefore gets a new version even when its own code did not change, and the packages of one application should all use the same version.
The versions published on NuGet.org so far fall into these lines:
| Versions | Package names | Format | Target frameworks of the last release |
|---|---|---|---|
| 5.0.x.y (2021 to 2022) | Arc4u.Standard.* |
Four parts, tied to .NET | netstandard2.0, netstandard2.1 |
| 6.0.x.y and 6.1.x.y (2022 to 2023) | Arc4u.Standard.* |
Four parts, tied to .NET | netstandard2.0, net6.0, net7.0 |
| 8.0.0 to 8.3.2 (2023 to 2025) | Arc4u.Standard.* |
Semantic versioning | netstandard2.0, net8.0, net9.0 |
| 9.0.0 previews (since 2025) | Arc4u.* |
Semantic versioning | 9.0.0-preview02 to 9.0.0-preview37: net8.0, net9.0, net10.0 (9.0.0-preview01: net8.0, net9.0) |
The code on the develop/9.0.0 branch, which this site documents, targets net10.0 and
net11.0 (see Target frameworks).
Note
A few packages also have a stable 1.0.0 version outside these lines, for example
Arc4u.Standard.Core, Arc4u.AspNetCore.Results and Arc4u.Dependency.Tool. Ignore it:
dotnet add package Arc4u.Dependency.Tool without --prerelease installs 1.0.0, not a
9.0.0 preview.
Before 8.0.0, a version followed the .NET version it was built with. For example, 6.0.9.1
was built with .NET 6.0.9:
- the first part was the .NET version supported,
- the second part changed for a breaking change in Arc4u,
- the third part was the minimum .NET patch version,
- the fourth part was the Arc4u change.
There is no Arc4u 7: the Arc4u.Prism.DI.Wpf package already had 7.2.x versions, so semantic
versioning started at 8.
Package names
Arc4u 9 renamed the packages by removing Standard from their IDs:
| Arc4u 8.x | Arc4u 9 |
|---|---|
Arc4u.Standard |
Arc4u |
Arc4u.Standard.Core |
Arc4u.Core |
Arc4u.Standard.<Area> |
Arc4u.<Area>, for example Arc4u.Standard.Caching.Redis becomes Arc4u.Caching.Redis |
What the rename does and does not change:
- The rename does not change namespaces. The 8.x packages already used
Arc4u.*namespaces. Other changes in Arc4u 9 moved or removed some types; the migration guide lists them. - Some packages already had the new name before 9:
Arc4u.AspNetCore.Results,Arc4u.Configuration.Store.EfCoreandArc4u.Prism.DI.Wpf(deprecated, not shipped in 9).Arc4u.Configuration.Storewas published under its new name for8.2.0-preview01to8.2.0-preview20, then asArc4u.Standard.Configuration.Storeuntil 8.3.2. - A package ID can differ from its folder name in the repository:
Arc4u.Caching.SqlServeris built fromsrc/Arc4u.Caching.Sql. - Paths of static web assets change. ASP.NET Core serves the files of a Razor class library
under
_content/<package ID>/, so the Blazor files ofArc4u.OAuth2.Blazorare now under_content/Arc4u.OAuth2.Blazor/. - Some packages were not carried over to Arc4u 9, and some are new. The package support page lists the status of each one.
The complete list of renamed packages is in Package renames in the migration guide.
Why Arc4u works this way
- A version number should say what changed. In the four-part scheme, the first and third parts described .NET rather than Arc4u, and because Arc4u supports several .NET versions at once they no longer said much. It was not possible to tell from a version whether it brought new features or only followed a .NET update. Semantic versioning answers that question.
- One version for all packages removes the need for a compatibility table: packages with the same version were built and tested together.
- The
Standardsuffix no longer meant anything. It dates from the packages that targeted .NET Standard only (the 5.x packages target onlynetstandard2.0andnetstandard2.1). Arc4u 9 targets current .NET versions only, exceptArc4u.Dependency, which also targetsnetstandard2.0, and theArc4u.Dependency.Toolsource generators, which targetnetstandard2.0as source generators must.
Trade-offs
- Previews are not stable. An API can change between two
9.0.0-previewNNversions. Read the changelog before you move to a newer preview. - New versions without changes. Because all packages share a version, upgrading one means upgrading all, even those whose code is identical.
- Two package families. The
Arc4u.Standard.*8.x packages are still on NuGet.org next to theArc4u.*9 packages. They contain the same namespaces and type names, so do not reference both families in one application.
In Arc4u
To keep every Arc4u package on the same version, use central package management and define the version once:
<!-- Directory.Packages.props -->
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<Arc4uVersion>9.0.0-preview37</Arc4uVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Arc4u.Caching" Version="$(Arc4uVersion)" />
<PackageVersion Include="Arc4u.Diagnostics" Version="$(Arc4uVersion)" />
</ItemGroup>
</Project>
To upgrade an application from the Arc4u.Standard.* 8.x packages, follow the
migration guide.