ktsu.StrongPaths
1.3.1
Prefix Reserved
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
<PackageReference Include="ktsu.StrongPaths" Version="1.3.1" />
<PackageVersion Include="ktsu.StrongPaths" Version="1.3.1" />
<PackageReference Include="ktsu.StrongPaths" />
paket add ktsu.StrongPaths --version 1.3.1
#r "nuget: ktsu.StrongPaths, 1.3.1"
#addin nuget:?package=ktsu.StrongPaths&version=1.3.1
#tool nuget:?package=ktsu.StrongPaths&version=1.3.1
ktsu.StrongPaths
A library providing strong typing for common filesystem paths with compile-time feedback and runtime validation
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 | Versions 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. |
-
net8.0
- ktsu.Extensions (>= 1.4.0)
- ktsu.StrongStrings (>= 1.3.0)
-
net9.0
- ktsu.Extensions (>= 1.4.0)
- ktsu.StrongStrings (>= 1.3.0)
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))