Skip to content

McSherry/McSherry.SemanticVersioning

Repository files navigation

Semantic Versioning for .NET Build Status

McSherry.SemanticVersioning is a comprehensive library for working with Semantic Versions. It takes care of parsing, comparing, formatting, and filtering and is intended as an easy-to-use, plug-and-play component of self-updating software, package managers, and any other software that needs to work with semantic versions.

Features

  • Full support for Semantic Versioning (2.0.0) and Monotonic Versioning (1.2)
  • Practically full support* for node-semver version ranges (up to v6.0.0)
  • Provides parsing, comparison, and formatting
  • Flexible and configurable parsing to suit nearly any application
  • Targets .NET 5, .NET Core 1.0/2.1/3.1, .NET Standard 1.0, and .NET Framework 4.5/4.6
  • Common Language Specification (CLS) compliant

Getting Started

Installation is simple, as the library is available via NuGet. To install, use the following from the NuGet Package Manager Console:

Install-Package McSherry.SemanticVersioning

Once installed, just import the McSherry.SemanticVersioning namespace and you're all set. Here's a small example to get you started:

Basic comparison

// The version we'll be comparing against.
var comparand = (SemanticVersion)"1.7.0";

while (true)
{    
    Console.Write("Enter a version number: ");
    var versionStr = Console.ReadLine();
    
    SemanticVersion userVersion;
    if (!SemanticVersion.TryParse(versionStr, out userVersion))
        Console.WriteLine("Uh oh! That's not a valid version!");
    else if (userVersion > comparand)
        Console.WriteLine($"Higher precedence than {comparand}!");
    else if (userVersion < comparand)
        Console.WriteLine($"Lower precedence than {comparand}!");
    else
        Console.WriteLine($"Equal precedence to {comparand}!");
        
    Console.WriteLine();
}

Version range comparison

using McSherry.SemanticVersioning.Ranges;

// The range of versions we want to accept.
var range = new VersionRange("1.7.x || 1.8.x");

while (true)
{
    Console.Write("Enter a version number: ");
    var versionStr = Console.ReadLine();
    
    if (!SemanticVersion.TryParse(versionStr, out var result))
    {
        Console.WriteLine("That's not a valid version!");
    }
    else
    {
        Console.WriteLine($"Acceptable? {range.SatisfiedBy(result)}.");
    }
    
    Console.WriteLine();
}

Contributing

Contributions are welcome, especially to documentation (both code comments and the markdown documentation).

Licence Information

The project is licensed under the MIT licence.

Copyright © 2015-21 Liam McSherry.