SemanticVersioning 3.0.0-beta2
dotnet add package SemanticVersioning --version 3.0.0-beta2
NuGet\Install-Package SemanticVersioning -Version 3.0.0-beta2
<PackageReference Include="SemanticVersioning" Version="3.0.0-beta2" />
paket add SemanticVersioning --version 3.0.0-beta2
#r "nuget: SemanticVersioning, 3.0.0-beta2"
// Install SemanticVersioning as a Cake Addin #addin nuget:?package=SemanticVersioning&version=3.0.0-beta2&prerelease // Install SemanticVersioning as a Cake Tool #tool nuget:?package=SemanticVersioning&version=3.0.0-beta2&prerelease
Semantic Versioning for .NET
This library implements the Semantic Versioning specification and the version range specifications used by npm (node-semver).
Installation
SemanticVersioning is available as a NuGet package. To install it, run the following command in the Package Manager Console:
Install-Package SemanticVersioning
Quick Start
Use the SemanticVersioning
namespace:
using SemanticVersioning;
Construct a range:
var range = new Range("~1.2.3");
Construct a version:
var version = new Version("1.2.4");
Test whether the version satisfies the range:
bool satisfied = range.IsSatisfied(version);
// satisfied = true
Filter a list of versions to select only those that satisfy a range:
var versions = new [] {
new Version("1.2.1"),
new Version("1.2.3"),
new Version("1.2.8"),
new Version("1.3.2"),
};
IEnumerable<Version> satisfyingVersions = range.Satisfying(versions);
// satisfyingVersions = 1.2.3, 1.2.8
Find the maximum version that satisfies a range:
Version selectedVersion = range.MaxSatisfying(versions);
// selectedVersion = 1.2.8
To get the original input string used when constructing a
version, use Version.ToString()
.
Ranges
SemanticVersioning range specifications match the range specifications used by node-semver.
A range specification is constructed by combining multiple
comparator sets with ||
, where the range is satisfied if any
of the comparator sets are satisfied.
A comparator set is a combination of comparators, where all comparators must be satisfied for a comparator set to be satisfied.
A comparator is made up of an operator and a version.
An operator is one of: =
, >
, >=
, <
, or <=
.
For example, the comparator >=1.2.3
specifies versions
greater than or equal to 1.2.3
.
An example of a range is >=1.2.3 <1.3.0 || =1.3.2
, which
is satisfied by 1.2.3
, 1.2.99
, and 1.3.2
, but not 1.3.0
.
Advanced Ranges
Ranges can also be specified using advanced range specification strings, which desugar into comparator sets.
Hyphen Ranges
A hyphen range specifies an inclusive range of valid versions, for example
1.2.3 - 1.4.2
is equivalent to >=1.2.3 <=1.4.2
.
X-Ranges
A partial version string, or a version string with components replaced by an X
or a *
matches any version where the specified components match.
For example, 1.2.x
is satisfied by 1.2.0
and 1.2.99
, but not 1.3.0
.
Tilde Ranges
When a minor version is specified, a tilde range only allows changes in the patch version. Otherwise if only the major version is specified, only changes in the minor version are allowed.
Examples:
~1.2.3
is equivalent to>=1.2.3 < 1.3.0
~1.2
is equivalent to>=1.2.0 < 1.3.0
~1
is equivalent to>=1.0.0 < 2.0.0
Caret Ranges
A caret range allows versions where the most significant non-zero version component does not change.
Examples:
^1.2.3
is equivalent to>=1.2.3 < 2.0.0
^0.2.3
is equivalent to>=0.2.3 < 0.3.0
^0.0.3
is equivalent to>=0.0.3 < 0.0.4
Pre-Release Versions
Versions with a pre-release can normally only satisfy ranges that contain a comparator with a pre-release version, and the comparator version's major, minor and patch components must match those of the version being tested.
var range = new Range(">=1.2.3-beta.2");
range.IsSatisfied("1.2.3-beta.3"); // true
range.IsSatisfied("1.2.3-alpha"); // false
range.IsSatisfied("1.2.3"); // true
range.IsSatisfied("1.2.4"); // true
range.IsSatisfied("1.2.4-beta.5"); // false
var range2 = new Range(">=1.2.3");
range2.IsSatisfied("1.2.4-alpha"); // false
To change this behaviour and allow any pre-release version to satisfy a range,
you can set the includePrerelease
argument to true:
var range = new Range(">=1.2.3-beta.2");
range.IsSatisfied("1.2.4-beta.5", includePrerelease=true); // true
var range2 = new Range(">=1.2.3");
range2.IsSatisfied("1.2.4-alpha", includePrerelease=true); // true
The Range.Satisfying
and Range.MaxSatisfying
methods similarly support
an includePrerelease
argument to allow any pre-release version.
Version Comparisons
Version
objects implement IEquatable<Version>
and IComparable<Version>
, and
can also be compared using ==
, >
, >=
, <
, <=
and !=
.
var a = new Version("1.2.3");
var b = new Version("1.3.0");
a == b; // false
a != b; // true
a > b; // false
a < b; // true
a <= b; // true
Usage Notes
The Range
and Version
constructors will throw
an ArgumentException
when an invalid range or version
string is used.
These constructors and all methods that accept versions
as a string have an optional loose
parameter, which will
allow some invalid version formats. For example, a pre-release
version without a leading hyphen
will be allowed when loose = true
.
var version = new Version("1.2.3alpha"); // Throws ArgumentException
var version = new Version("1.2.3alpha", true); // No exception thrown
The Range
class contains separate methods that accept
versions either as strings or as Version
objects.
When passing versions as a string to range methods,
invalid version strings will act as if the version does
not satisfy the range, but no exception will be thrown.
Therefore, if you want to know when a version string is invalid,
you should construct Version
objects and check for an ArgumentException
.
var range = new Range("~1.2.3");
// Returns false:
range.IsSatisfied("banana");
// Version constructor throws ArgumentException:
range.IsSatisfied(new Version("banana"));
For convenience, static methods of the Range
class are provided
that accept a range parameter as the first argument and accept versions
as strings, so you don't have to
construct any Range
or Version
objects if you just want to use one method:
// Returns 1.2.8:
Range.MaxSatisfying("~1.2.3",
new [] {"1.2.1", "1.2.3", "1.2.8", "1.3.2"});
Product | Versions 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. |
.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. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (39)
Showing the top 5 NuGet packages that depend on SemanticVersioning:
Package | Downloads |
---|---|
Firely.Fhir.Packages
This is Firely's support library for anyone who wants to work with HL7 FHIR packages. |
|
FeatureHub.SDK
.Net SDK implementation for FeatureHub.io - Open source Feature flags management, A/B testing and remote configuration platform. |
|
Statiq.Core
Statiq is a configurable static content generation framework. |
|
Elastic.Stack.ArtifactsApi
Provides a set of classes to resolve the location of Elastic stack products in various stages: released, snapshot and build candidates |
|
Ionide.ProjInfo
MSBuild evaluation, fsproj file loading, and project system for F# tooling |
GitHub repositories (13)
Showing the top 5 popular GitHub repositories that depend on SemanticVersioning:
Repository | Stars |
---|---|
Flow-Launcher/Flow.Launcher
:mag: Quick file search & app launcher for Windows with community-made plugins
|
|
BepInEx/BepInEx
Unity / XNA game patcher and plugin framework
|
|
antonpup/Aurora
Unified lighting effects across multiple brands and various games.
|
|
geffzhang/NanoFabric
基于Consul + .NET Core + Polly + Ocelot + Exceptionless + IdentityServer等开源项目的微服务开发框架
|
|
microsoft/Oryx
Build your repo automatically.
|
Version | Downloads | Last updated |
---|---|---|
3.0.0-beta2 | 1,389 | 11/1/2023 |
3.0.0-beta1 | 132 | 10/17/2023 |
2.0.2 | 1,034,271 | 3/14/2022 |
2.0.0 | 204,192 | 7/2/2021 |
2.0.0-alpha.1 | 232 | 5/13/2021 |
1.3.0 | 914,740 | 9/26/2020 |
1.2.2 | 808,058 | 10/12/2019 |
1.2.1 | 9,905 | 9/28/2019 |
1.2.0 | 2,233,955 | 7/22/2018 |
1.1.0 | 24,090 | 4/27/2018 |
1.0.0 | 19,653 | 11/7/2017 |
0.9.2 | 1,411 | 10/22/2017 |
0.8.0 | 390,052 | 3/18/2017 |
0.7.6 | 27,276 | 11/7/2016 |
0.7.5 | 1,369 | 9/30/2016 |
0.7.4 | 1,413 | 9/23/2016 |
0.7.3 | 1,135 | 9/23/2016 |
0.7.2 | 1,455 | 9/17/2016 |
0.6.17 | 1,836 | 4/19/2016 |
0.6.16 | 1,311 | 4/18/2016 |
0.6.15 | 1,348 | 4/12/2016 |
0.6.12 | 1,503 | 2/17/2016 |
0.6.9 | 1,532 | 2/1/2016 |
0.6.2 | 15,332 | 11/10/2015 |
0.6.0 | 1,406 | 10/27/2015 |
0.5.1 | 18,655 | 4/27/2015 |
0.5.0 | 7,860 | 4/15/2015 |
0.4.0 | 1,497 | 4/2/2015 |
0.3.0 | 1,415 | 3/31/2015 |
0.2.0 | 1,462 | 3/29/2015 |
0.1.0 | 11,929 | 3/29/2015 |