Gapotchenko.FX.Versioning.Semantic
2026.5.3
Prefix Reserved
dotnet add package Gapotchenko.FX.Versioning.Semantic --version 2026.5.3
NuGet\Install-Package Gapotchenko.FX.Versioning.Semantic -Version 2026.5.3
<PackageReference Include="Gapotchenko.FX.Versioning.Semantic" Version="2026.5.3" />
<PackageVersion Include="Gapotchenko.FX.Versioning.Semantic" Version="2026.5.3" />
<PackageReference Include="Gapotchenko.FX.Versioning.Semantic" />
paket add Gapotchenko.FX.Versioning.Semantic --version 2026.5.3
#r "nuget: Gapotchenko.FX.Versioning.Semantic, 2026.5.3"
#:package Gapotchenko.FX.Versioning.Semantic@2026.5.3
#addin nuget:?package=Gapotchenko.FX.Versioning.Semantic&version=2026.5.3
#tool nuget:?package=Gapotchenko.FX.Versioning.Semantic&version=2026.5.3
Overview
The module provides semantic versioning functionality that follows the Semantic Versioning 2.0.0 specification.
SemanticVersion
SemanticVersion record from Gapotchenko.FX.Versioning.Semantic module represents a semantic version with support for major, minor, patch, prerelease, and build metadata components.
Creating a Semantic Version
You can create a SemanticVersion in several ways:
using Gapotchenko.FX.Versioning;
// Using constructor with major, minor, and patch
var version1 = new SemanticVersion(1, 2, 3);
// With prerelease and build metadata
var version2 = new SemanticVersion(1, 2, 3, "alpha.1", "20240101");
// From a version string
var version3 = new SemanticVersion("1.2.3-alpha.1+20240101");
// Using Parse method
var version4 = SemanticVersion.Parse("2.0.0-beta.2");
Parsing
The Parse method converts a string representation of a semantic version to a SemanticVersion object:
using Gapotchenko.FX.Versioning;
var version = SemanticVersion.Parse("1.2.3-alpha.1+20240101");
Console.WriteLine($"Major: {version.Major}, Minor: {version.Minor}, Patch: {version.Patch}");
Console.WriteLine($"Prerelease: {version.Prerelease}, Build: {version.Build}");
For scenarios where the input might be invalid, use TryParse:
if (SemanticVersion.TryParse("1.2.3", out var version))
Console.WriteLine($"Parsed version: {version}");
else
Console.WriteLine("Invalid version string");
Version Components
A SemanticVersion exposes the following properties:
Major: The major version numberMinor: The minor version numberPatch: The patch version numberPrerelease: The prerelease identifier (e.g., "alpha.1", "beta.2", "rc.1")Build: The build metadata (e.g., "20240101", "abc123")
using Gapotchenko.FX.Versioning;
var version = new SemanticVersion(1, 2, 3, "alpha.1", "20240101");
Console.WriteLine(version.Major); // 1
Console.WriteLine(version.Minor); // 2
Console.WriteLine(version.Patch); // 3
Console.WriteLine(version.Prerelease); // "alpha.1"
Console.WriteLine(version.Build); // "20240101"
Comparison
SemanticVersion implements IComparable<SemanticVersion> and supports standard comparison operators:
using Gapotchenko.FX.Versioning;
var v1 = new SemanticVersion(1, 2, 3);
var v2 = new SemanticVersion(1, 2, 4);
var v3 = new SemanticVersion(1, 2, 3, "alpha.1");
Console.WriteLine(v1 < v2); // True
Console.WriteLine(v1 > v3); // True (release version is greater than prerelease)
Console.WriteLine(v1 == v2); // False
Prerelease versions are considered less than release versions:
var release = new SemanticVersion(1, 0, 0);
var prerelease = new SemanticVersion(1, 0, 0, "alpha.1");
Console.WriteLine(release > prerelease); // True
Conversion to System.Version
SemanticVersion can be implicitly converted to System.Version:
using Gapotchenko.FX.Versioning;
using System;
var semanticVersion = new SemanticVersion(1, 2, 3, "alpha.1", "20240101");
Version version = semanticVersion; // Implicit conversion
Console.WriteLine(version); // "1.2.3"
Note that the conversion is lossy because System.Version does not support prerelease or build metadata.
Conversion from System.Version
You can create a SemanticVersion from a System.Version:
using Gapotchenko.FX.Versioning;
using System;
var version = new Version(1, 2, 3);
var semanticVersion = new SemanticVersion(version);
Console.WriteLine(semanticVersion); // "1.2.3"
Deconstruction
SemanticVersion supports deconstruction for easy extraction of version components:
using Gapotchenko.FX.Versioning;
var version = new SemanticVersion(1, 2, 3);
// Deconstruct to major and minor
var (major, minor) = version;
// Deconstruct to major, minor, and patch
var (major2, minor2, patch) = version;
String Formatting
SemanticVersion provides a ToString() method that returns the standard semantic version string format:
using Gapotchenko.FX.Versioning;
var version = new SemanticVersion(1, 2, 3, "alpha.1", "20240101");
Console.WriteLine(version.ToString()); // "1.2.3-alpha.1+20240101"
Type Converter
SemanticVersion includes a TypeConverter that enables seamless integration with various .NET components:
using Gapotchenko.FX.Versioning;
using System.ComponentModel;
var converter = TypeDescriptor.GetConverter(typeof(SemanticVersion));
var version = (SemanticVersion)converter.ConvertFrom("1.2.3");
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- Gapotchenko.FX.Tuples
- Gapotchenko.FX.Versioning
Or look at the full list of modules.
| 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 is compatible. 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 is compatible. 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 is compatible. 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 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. 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. |
-
.NETFramework 4.7.2
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
-
.NETStandard 2.0
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
-
.NETStandard 2.1
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
-
net10.0
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
-
net8.0
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
-
net9.0
- Gapotchenko.FX.Threading (>= 2026.5.3)
- Gapotchenko.FX.Versioning (>= 2026.5.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.5.3 | 87 | 2/24/2026 |
| 2026.4.2 | 104 | 2/4/2026 |
| 2026.3.5 | 99 | 1/29/2026 |
| 2026.2.2 | 105 | 1/25/2026 |
| 2026.1.5 | 106 | 1/13/2026 |
| 2025.1.45 | 191 | 12/25/2025 |
| 2025.1.27-beta | 203 | 10/9/2025 |
| 2025.1.26-beta | 258 | 8/30/2025 |
| 2025.1.25-beta | 589 | 7/22/2025 |
| 2025.1.24-beta | 207 | 7/16/2025 |
| 2025.1.23-beta | 156 | 7/12/2025 |