ktsu.StrongPaths 1.3.1

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package ktsu.StrongPaths --version 1.3.1
                    
NuGet\Install-Package ktsu.StrongPaths -Version 1.3.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ktsu.StrongPaths" Version="1.3.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ktsu.StrongPaths" Version="1.3.1" />
                    
Directory.Packages.props
<PackageReference Include="ktsu.StrongPaths" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ktsu.StrongPaths --version 1.3.1
                    
#r "nuget: ktsu.StrongPaths, 1.3.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=ktsu.StrongPaths&version=1.3.1
                    
Install ktsu.StrongPaths as a Cake Addin
#tool nuget:?package=ktsu.StrongPaths&version=1.3.1
                    
Install ktsu.StrongPaths as a Cake Tool

ktsu.StrongPaths

A library providing strong typing for common filesystem paths with compile-time feedback and runtime validation

License NuGet NuGet Downloads Build Status GitHub Stars

Introduction

StrongPaths is a collection of classes derived from ktsu.StrongStrings with added functionality and helper methods for filesystem paths. It provides strong typing for common filesystem paths, giving you compile-time feedback and runtime validation to help catch path-related errors early in your development cycle.

Get familiar with the StrongStrings library to get the most out of StrongPaths.

Features

  • Strong Typing for file system paths to prevent type confusion
  • Path Combination using overloaded operators for intuitive path building
  • Compile-time Safety to catch type mismatches early
  • Runtime Validation for path format and structure
  • Relative Path Calculations between different path types
  • Hierarchical Type System for flexible parameter constraints

Installation

Package Manager Console

Install-Package ktsu.StrongPaths

.NET CLI

dotnet add package ktsu.StrongPaths

Package Reference

<PackageReference Include="ktsu.StrongPaths" Version="x.y.z" />

Usage Examples

Basic Example

using ktsu.StrongPaths;

// Create strongly-typed paths
AbsoluteDirectoryPath rootDir = (AbsoluteDirectoryPath)@"C:\Projects";
RelativeDirectoryPath subDir = (RelativeDirectoryPath)"MyProject";
FileName configFile = (FileName)"config.json";

// Combine paths with the / operator
AbsoluteFilePath fullPath = rootDir / subDir / configFile;

// Use with standard file operations
File.WriteAllText(fullPath, "{ \"setting\": \"value\" }");

Path Combining with Operators

using ktsu.StrongPaths;

public class MyDemoClass
{
    public AbsoluteDirectoryPath OutputDir { get; set; } = (AbsoluteDirectoryPath)@"c:\output";

    public void SaveData(RelativeDirectoryPath subDir, FileName fileName)
    {
        // You can use the / operator to combine paths
        AbsoluteFilePath filePath = OutputDir / subDir / fileName;
        File.WriteAllText(filePath, "Hello, world!");

        // An AbsoluteDirectoryPath combined with a RelativeDirectoryPath returns an AbsoluteDirectoryPath
        AbsoluteDirectoryPath newOutputDir = OutputDir / subDir;

        // An AbsoluteDirectoryPath combined with a FileName returns an AbsoluteFilePath
        AbsoluteFilePath newFilePath = newOutputDir / fileName;
    }
}

Calculating Relative Paths

using ktsu.StrongPaths;

AbsoluteDirectoryPath baseDir = (AbsoluteDirectoryPath)@"C:\Projects\MainProject";
AbsoluteDirectoryPath targetDir = (AbsoluteDirectoryPath)@"C:\Projects\MainProject\Submodule\Source";
AbsoluteFilePath targetFile = (AbsoluteFilePath)@"C:\Projects\MainProject\Submodule\Source\Program.cs";

// Get relative paths from one location to another
RelativeDirectoryPath relativeDir = targetDir.RelativeTo(baseDir);  // "Submodule\Source"
RelativeFilePath relativeFile = targetFile.RelativeTo(baseDir);     // "Submodule\Source\Program.cs"

Advanced Usage

Using Abstract Base Classes

You can use abstract base classes to accept a subset of path types in your method parameters:

using ktsu.StrongPaths;

public static class MyDemoClass
{
    public static void SaveData(AnyDirectoryPath outputDir, FileName fileName)
    {
        // You can't use the / operator with the abstract base classes because it has no way of knowing which type to return
        // You have to use the Path.Combine method when using the abstract base classes
        FilePath filePath = (FilePath)Path.Combine(outputDir, fileName);
        File.WriteAllText(filePath, "Hello, World!");
    }

    public static void Demo()
    {
        string storeLocation = "melbourne";
        RelativeDirectoryPath storeDir = (RelativeDirectoryPath)$"store_{storeLocation}";
        FileName fileName = (FileName)$"{DateTime.UtcNow}.json";
        SaveData(storeDir, fileName);
    }
}

Path Validation and Creation

using ktsu.StrongPaths;

// Validate paths at creation
try 
{
    // This will throw if the path is invalid
    AbsoluteFilePath invalidPath = (AbsoluteFilePath)"not:a:valid:path";
}
catch (FormatException ex)
{
    Console.WriteLine("Invalid path format: " + ex.Message);
}

// Create a directory if it doesn't exist
AbsoluteDirectoryPath projectDir = (AbsoluteDirectoryPath)@"C:\Projects\NewProject";
if (!Directory.Exists(projectDir))
{
    Directory.CreateDirectory(projectDir);
}

API Reference

Available Types

Concrete Types
Type Description
AbsolutePath Base type for all absolute paths
RelativePath Base type for all relative paths
DirectoryPath Base type for all directory paths
FilePath Base type for all file paths
FileName Represents just a filename with extension
FileExtension Represents just a file extension
AbsoluteDirectoryPath Represents an absolute directory path
RelativeDirectoryPath Represents a relative directory path
AbsoluteFilePath Represents an absolute file path
RelativeFilePath Represents a relative file path
Abstract Base Classes
Type Accepted Derived Types
AnyStrongPath All concrete path types
AnyRelativePath RelativePath, RelativeDirectoryPath, RelativeFilePath
AnyAbsolutePath AbsolutePath, AbsoluteDirectoryPath, AbsoluteFilePath
AnyDirectoryPath DirectoryPath, AbsoluteDirectoryPath, RelativeDirectoryPath
AnyFilePath FilePath, AbsoluteFilePath, RelativeFilePath

Key Operations

Operation Description
/ operator Combines paths with appropriate type safety
RelativeTo(...) Calculates a relative path between two locations
Type casting Convert between string and path types with validation

Contributing

Contributions are welcome! Please feel free to submit a pull request.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

Product Compatible and additional computed target framework versions.
.NET 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (8)

Showing the top 5 NuGet packages that depend on ktsu.StrongPaths:

Package Downloads
ktsu.AppDataStorage

Application data management library using JSON serialization to save and load data in the user's app data folder.

ktsu.ImGuiApp

A .NET library that provides application scaffolding for Dear ImGui, using Silk.NET and ImGui.NET.

ktsu.ImGuiWidgets

A library of custom widgets using ImGui.NET and utilities to enhance ImGui-based applications.

ktsu.ImGuiPopups

A library for custom popups using ImGui.NET.

ktsu.CredentialCache

CredentialCache

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.3.2 274 5/21/2025
1.3.2-pre.17 110 5/20/2025
1.3.2-pre.15 73 5/17/2025
1.3.2-pre.14 118 5/16/2025
1.3.2-pre.13 189 5/15/2025
1.3.2-pre.12 190 5/14/2025
1.3.2-pre.11 192 5/13/2025
1.3.2-pre.10 220 5/12/2025
1.3.2-pre.9 159 5/11/2025
1.3.2-pre.8 103 5/10/2025
1.3.2-pre.7 39 5/9/2025
1.3.2-pre.6 112 5/8/2025
1.3.2-pre.5 112 5/7/2025
1.3.2-pre.4 107 5/6/2025
1.3.2-pre.3 114 5/5/2025
1.3.2-pre.2 111 5/4/2025
1.3.2-pre.1 113 5/4/2025
1.3.1 2,431 5/4/2025
1.3.1-pre.2 48 4/26/2025
1.3.1-pre.1 112 4/4/2025
1.3.0 2,032 3/30/2025
1.2.1-pre.3 75 3/29/2025
1.2.1-pre.2 450 3/25/2025
1.2.1-pre.1 67 2/18/2025
1.2.0 2,238 2/17/2025
1.1.51-pre.3 65 2/6/2025
1.1.51-pre.2 57 2/5/2025
1.1.51-pre.1 58 2/5/2025
1.1.50 3,102 1/2/2025
1.1.50-pre.28 59 2/4/2025
1.1.50-pre.27 62 2/3/2025
1.1.50-pre.26 60 2/2/2025
1.1.50-pre.25 60 1/31/2025
1.1.50-pre.24 49 1/29/2025
1.1.50-pre.23 50 1/27/2025
1.1.50-pre.22 56 1/25/2025
1.1.50-pre.21 52 1/23/2025
1.1.50-pre.20 54 1/21/2025
1.1.50-pre.19 49 1/20/2025
1.1.50-pre.18 52 1/19/2025
1.1.50-pre.17 49 1/17/2025
1.1.50-pre.16 45 1/15/2025
1.1.50-pre.15 52 1/13/2025
1.1.50-pre.14 56 1/11/2025
1.1.50-pre.13 49 1/10/2025
1.1.50-pre.12 53 1/10/2025
1.1.50-pre.11 46 1/8/2025
1.1.50-pre.10 62 1/7/2025
1.1.50-pre.9 65 1/6/2025
1.1.50-pre.8 77 1/4/2025
1.1.50-pre.7 63 1/3/2025
1.1.50-pre.6 62 1/3/2025
1.1.50-pre.5 62 1/3/2025
1.1.50-pre.4 76 1/1/2025
1.1.50-pre.3 82 12/31/2024
1.1.50-pre.2 62 12/29/2024
1.1.50-pre.1 56 12/28/2024
1.1.49 1,756 12/26/2024
1.1.48 91 12/26/2024
1.1.47 96 12/26/2024
1.1.46 96 12/26/2024
1.1.45 98 12/26/2024
1.1.44 93 12/26/2024
1.1.43 106 12/26/2024
1.1.42 258 12/25/2024
1.1.41 313 12/24/2024
1.1.40 340 12/23/2024
1.1.39 101 12/23/2024
1.1.38 98 12/23/2024
1.1.37 596 12/19/2024
1.1.36 420 12/14/2024
1.1.35 493 12/6/2024
1.1.34 236 12/5/2024
1.1.33 427 12/2/2024
1.1.32 307 12/2/2024
1.1.31 277 12/1/2024
1.1.30 145 12/1/2024
1.1.29 157 11/30/2024
1.1.28 98 11/30/2024
1.1.27 111 11/30/2024
1.1.26 148 11/29/2024
1.1.25 214 11/28/2024
1.1.24 263 11/26/2024
1.1.23 586 11/15/2024
1.1.22 227 11/14/2024
1.1.21 214 11/13/2024
1.1.20 552 11/5/2024
1.1.19 250 11/2/2024
1.1.18 305 11/1/2024
1.1.17 806 10/17/2024
1.1.16 526 10/8/2024
1.1.15 236 10/5/2024
1.1.14 192 10/4/2024
1.1.13 527 9/24/2024
1.1.12 219 9/21/2024
1.1.11 225 9/19/2024
1.1.10 172 9/19/2024
1.1.9 168 9/19/2024
1.1.8 105 9/19/2024
1.1.7 163 9/19/2024
1.1.6 127 9/18/2024
1.1.5 111 9/18/2024
1.1.4 254 9/18/2024
1.1.3 369 9/18/2024
1.1.2 371 9/14/2024

## v1.3.1 (patch)

Changes since v1.3.0:

- Update README with enhanced features section, usage examples, and installation instructions; change project SDK references in .csproj files. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove Directory.Build.props and Directory.Build.targets files; add copyright headers to StrongPaths files; update StrongStrings submodule reference; delete unused scripts for commit metadata, changelog, license, and version management. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.3.1-pre.2 (prerelease)

Changes since v1.3.1-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.3.1-pre.1 (prerelease)

Changes since v1.3.0:

- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.3.0 (minor)

Changes since v1.2.0:

- Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.2.1-pre.3 (prerelease)

Changes since v1.2.1-pre.2:

- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.1-pre.2 (prerelease)

Changes since v1.2.1-pre.1:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.1-pre.1 (prerelease)

Changes since v1.2.0:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.2.0 (minor)

Changes since 1.1.0:

- Update StrongStrings subproject reference ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor MakeCanonical and update Tests.cs namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix crash when using prefix/suffix methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor test assertions in Tests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Ensure paths are fully qualified in IsValid method ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.51-pre.3 (prerelease)

Changes since v1.1.51-pre.2:

- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.51-pre.2 (prerelease)

Changes since v1.1.51-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.51-pre.1 (prerelease)

Changes since v1.1.50:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest from 3.7.1 to 3.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest from 3.7.0 to 3.7.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest from 3.7.2 to 3.7.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump coverlet.collector from 6.0.3 to 6.0.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50 (patch)

Changes since v1.1.49:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.50-pre.28 (prerelease)

Changes since v1.1.50-pre.27:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.27 (prerelease)

Changes since v1.1.50-pre.26:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.26 (prerelease)

Changes since v1.1.50-pre.25:
## v1.1.50-pre.25 (prerelease)

Changes since v1.1.50-pre.24:
## v1.1.50-pre.24 (prerelease)

Changes since v1.1.50-pre.23:
## v1.1.50-pre.23 (prerelease)

Changes since v1.1.50-pre.22:

- Bump MSTest from 3.7.2 to 3.7.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.22 (prerelease)

Changes since v1.1.50-pre.21:
## v1.1.50-pre.21 (prerelease)

Changes since v1.1.50-pre.20:
## v1.1.50-pre.20 (prerelease)

Changes since v1.1.50-pre.19:

- Bump MSTest from 3.7.1 to 3.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.19 (prerelease)

Changes since v1.1.50-pre.18:

- Bump coverlet.collector from 6.0.3 to 6.0.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.18 (prerelease)

Changes since v1.1.50-pre.17:
## v1.1.50-pre.17 (prerelease)

Changes since v1.1.50-pre.16:
## v1.1.50-pre.16 (prerelease)

Changes since v1.1.50-pre.15:
## v1.1.50-pre.15 (prerelease)

Changes since v1.1.50-pre.14:

- Bump MSTest from 3.7.0 to 3.7.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.14 (prerelease)

Changes since v1.1.50-pre.13:
## v1.1.50-pre.13 (prerelease)

Changes since v1.1.50-pre.12:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.12 (prerelease)

Changes since v1.1.50-pre.11:

- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.11 (prerelease)

Changes since v1.1.50-pre.10:
## v1.1.50-pre.10 (prerelease)

Changes since v1.1.50-pre.9:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.9 (prerelease)

Changes since v1.1.50-pre.8:
## v1.1.50-pre.8 (prerelease)

Changes since v1.1.50-pre.7:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.7 (prerelease)

Changes since v1.1.50-pre.6:

- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.6 (prerelease)

Changes since v1.1.50-pre.5:

- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.50-pre.5 (prerelease)

Changes since v1.1.50-pre.4:

- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.50-pre.4 (prerelease)

Changes since v1.1.50-pre.3:

- Bump coverlet.collector from 6.0.2 to 6.0.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.3 (prerelease)

Changes since v1.1.50-pre.2:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.50-pre.2 (prerelease)

Changes since v1.1.50-pre.1:
## v1.1.50-pre.1 (prerelease)

Incremental prerelease update.
## v1.1.49 (patch)

Changes since v1.1.48:

- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.48 (patch)

Changes since v1.1.47:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.47 (patch)

Changes since v1.1.46:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.46 (patch)

Changes since v1.1.45:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.45 (patch)

Changes since v1.1.44:

- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.44 (patch)

Changes since v1.1.43:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.43 (patch)

Changes since v1.1.42:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.42 (patch)

Changes since v1.1.41:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.41 (patch)

Changes since v1.1.40:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.40 (patch)

Changes since v1.1.39:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.39 (patch)

Changes since v1.1.38:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.38 (patch)

Changes since v1.1.37:

- Update StrongStrings subproject reference ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor test assertions in Tests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.37 (patch)

Changes since v1.1.36:
## v1.1.36 (patch)

Changes since v1.1.35:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.35 (patch)

Changes since v1.1.34:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.34 (patch)

Changes since v1.1.33:

- Bump MSTest.TestAdapter from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.33 (patch)

Changes since v1.1.32:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.32 (patch)

Changes since v1.1.31:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.31 (patch)

Changes since v1.1.30:
## v1.1.30 (patch)

Changes since v1.1.29:
## v1.1.29 (patch)

Changes since v1.1.28:

- Ensure paths are fully qualified in IsValid method ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.28 (patch)

Changes since v1.1.27:

- Refactor MakeCanonical and update Tests.cs namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.27 (patch)

Changes since v1.1.26:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.26 (patch)

Changes since v1.1.25:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.25 (patch)

Changes since v1.1.24:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.24 (patch)

Changes since v1.1.23:

- Bump Microsoft.NET.Test.Sdk in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump ktsu.StrongStrings from 1.2.10 to 1.2.11 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.23 (patch)

Changes since v1.1.22:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.22 (patch)

Changes since v1.1.21:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestAdapter from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.21 (patch)

Changes since v1.1.20:

- Bump MSTest.TestFramework from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.20 (patch)

Changes since v1.1.19:

- Bump ktsu.Extensions from 1.0.22 to 1.0.23 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.19 (patch)

Changes since v1.1.18:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.18 (patch)

Changes since v1.1.17:

- Bump MSTest.TestAdapter from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.17 (patch)

Changes since v1.1.16:

- Bump ktsu.Extensions from 1.0.20 to 1.0.21 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.16 (patch)

Changes since v1.1.15:

- Bump ktsu.Extensions from 1.0.19 to 1.0.20 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.15 (patch)

Changes since v1.1.14:

- Bump MSTest.TestAdapter from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.14 (patch)

Changes since v1.1.13:

- Bump MSTest.TestFramework from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.13 (patch)

Changes since v1.1.12:

- Bump ktsu.Extensions from 1.0.17 to 1.0.18 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.12 (patch)

Changes since v1.1.11:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.11 (patch)

Changes since v1.1.10:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.10 (patch)

Changes since v1.1.9:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.9 (patch)

Changes since v1.1.8:
## v1.1.8 (patch)

Changes since v1.1.7:

- Bump ktsu.Extensions from 1.0.9 to 1.0.12 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump ktsu.StrongStrings from 1.2.1 to 1.2.5 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump ktsu.Extensions from 1.0.12 to 1.0.13 in the all group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.7 (patch)

Changes since v1.1.6:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.6 (patch)

Changes since v1.1.5:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.5 (patch)

Changes since v1.1.4:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.1.4 (patch)

Changes since v1.1.3:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestAdapter from 3.4.3 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump ktsu.StrongStrings from 1.2.0 to 1.2.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.4.3 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.1.3 (patch)

Changes since v1.1.2:

- Bump ktsu.Extensions from 1.0.8 to 1.0.9 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.2 (minor)

Changes since v1.0.8:

- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Add WithFilePrefix ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix crash when using prefix/suffix methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.8 (major)

- Add some common path types like absolute and relative file and directory paths ([@matt-edmondson](https://github.com/matt-edmondson))
- Dont try to push packages when building pull requests ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from VERSION when building ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Make unit tests work with linux ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from VERSION when building ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix style warnings for ArgumentNullException.ThrowIfNull and take latest StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Use package reference instead of project reference to StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable dependabot and sourcelink ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Make the RelativePath Make method public Add a FileName property to AnyStrongPath Take latest StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add RelativeTo helper methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial WIP commit ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from .project.props to Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Adjust unit test to work on linux ([@matt-edmondson](https://github.com/matt-edmondson))
- Add path combine operators to common path types ([@matt-edmondson](https://github.com/matt-edmondson))
- Update StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- WIP while trying to figure out the use cases for StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Avoid double upload of symbols package ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Move some file specific properties into AnyFilePath add a DirectoryPath property to FilePath ([@matt-edmondson](https://github.com/matt-edmondson))
- Assign dependabot PRs to matt ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update readme and description ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Allow paths to be empty ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix issue with RelativeTo not working correctly and add additional unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Update StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add github package support ([@matt-edmondson](https://github.com/matt-edmondson))
- Add a property to get the filesystem contents from directories ([@matt-edmondson](https://github.com/matt-edmondson))
- Use code generation to make all the user facing classes and add some unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Make unit tests work on linux ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Create dependabot-merge.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Don't crash when trying to get the contents of an unauthorized directory, just return nothing instead ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump version to 1.0.0-alpha.2 ([@matt-edmondson](https://github.com/matt-edmondson))
- Readd strongstrings so that we can share the csx scripts it uses for code generation ([@matt-edmondson](https://github.com/matt-edmondson))
- WIP ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor AnyFilePath and update StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add helper properties to top level paths ([@matt-edmondson](https://github.com/matt-edmondson))
- Add IsDirectory  and IsFile  properties ([@matt-edmondson](https://github.com/matt-edmondson))
- Create VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Read PackageDescription from DESCRIPTION file ([@matt-edmondson](https://github.com/matt-edmondson))
- Fixed an issue where a directory in the CWD that had periods in the name would not validate as a directory path. Also code style cleanup. ([@matt-edmondson](https://github.com/matt-edmondson))
- Chnage path separators to make code gen work on github ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from AUTHORS file during build ([@matt-edmondson](https://github.com/matt-edmondson))
- Make unit tests work with linux ([@matt-edmondson](https://github.com/matt-edmondson))