ktsu.AppDataStorage 1.10.0

Prefix Reserved
Suggested Alternatives

ktsu.AppData

Additional Details

Package renamed

There is a newer version of this package available.
See the version list below for details.
dotnet add package ktsu.AppDataStorage --version 1.10.0
                    
NuGet\Install-Package ktsu.AppDataStorage -Version 1.10.0
                    
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.AppDataStorage" Version="1.10.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ktsu.AppDataStorage" Version="1.10.0" />
                    
Directory.Packages.props
<PackageReference Include="ktsu.AppDataStorage" />
                    
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.AppDataStorage --version 1.10.0
                    
#r "nuget: ktsu.AppDataStorage, 1.10.0"
                    
#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.AppDataStorage&version=1.10.0
                    
Install as a Cake Addin
#tool nuget:?package=ktsu.AppDataStorage&version=1.10.0
                    
Install as a Cake Tool

ktsu.AppDataStorage

A .NET library for simple application data management with JSON serialization.

License NuGet Version NuGet Version NuGet Downloads GitHub commit activity GitHub contributors GitHub Actions Workflow Status

Introduction

ktsu.AppDataStorage is a .NET library designed to simplify the process of managing application data. It facilitates saving and loading configuration or state data to the application's data folder, leveraging JSON serialization. The library handles file operations with safety mechanisms like automatic backups and provides an intuitive API for developers.

Features

  • Easy-to-use API: Intuitive methods for saving and loading data.
  • Automatic Backup: Backs up original files before overwriting to ensure data safety.
  • Custom Serialization Options: Uses System.Text.Json with support for custom converters.
  • File System Abstraction: Uses System.IO.Abstractions for easy unit testing and mocking.
  • Debounced Saves: Prevents frequent file writes to improve performance.
  • Support for Multiple Applications: Organizes data by application domain for isolation.
  • Static Instance Access: Provides easy access to a singleton-like instance for centralized data management.

Installation

Package Manager Console

Install-Package ktsu.AppDataStorage

.NET CLI

dotnet add package ktsu.AppDataStorage

Package Reference

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

Usage Examples

Defining Your Application Data Class

Create a class that inherits from AppData<T>, where T is your custom data type.

public class MyAppData : AppData<MyAppData>
{
    public string Setting1 { get; set; } = "hello";
    public int Setting2 { get; set; } = 12;
}

Loading Data

Load existing data or create a new instance if no data file exists using LoadOrCreate.

var data = MyAppData.LoadOrCreate();
Console.WriteLine(data.Setting1);
Console.WriteLine(data.Setting2);

// Output:
// hello
// 12

Accessing the Static Instance

The AppData<T> class provides a static instance through the Get method, which ensures a single, easily accessible instance is available throughout your application:

var data = MyAppData.Get();
Console.WriteLine(data.Setting1);

The static instance is initialized automatically and matches the instance returned by LoadOrCreate. Changes to the static instance are persistent once saved:

var data = MyAppData.Get();
data.Setting1 = "new value";
data.Save();

var sameData = MyAppData.Get();
Console.WriteLine(sameData.Setting1);

// Output:
// new value

Saving Data

Modify properties and save the data using the Save method.

var data = MyAppData.Get();
data.Setting1 = "goodbye";
data.Setting2 = 42;
data.Save();

var reloadedData = MyAppData.Get();
Console.WriteLine(reloadedData.Setting1);
Console.WriteLine(reloadedData.Setting2);

// Output:
// goodbye
// 42

Advanced Usage

Queued and Debounced Saving

For scenarios with frequent updates, you can queue save operations using QueueSave, which automatically debounces writes to avoid frequent file system operations.

MyAppData.QueueSave();  // Schedules a save
MyAppData.SaveIfRequired();  // Performs the save if the debounce threshold is exceeded

Writing and Reading Arbitrary Text Files

Write and read arbitrary files in the application's data folder using the static AppData class.

Write Text
AppData.WriteText("example.txt".As<FileName>(), "Hello, AppData!");
Read Text
string content = AppData.ReadText("example.txt".As<FileName>());
Console.WriteLine(content);

// Output:
// Hello, AppData!

Customizing Serialization

Serialization behavior can be customized using JsonSerializerOptions. By default, the library uses:

  • Indented JSON for readability.
  • ReferenceHandler.Preserve for circular references.
  • Converters such as JsonStringEnumConverter and ToStringJsonConverter.

Directory and File Paths

Data is stored in a directory unique to the current application domain:

var appDataPath = AppData.Path;
Console.WriteLine($"App Data Path: {appDataPath}");

API Reference

AppData Static Class

The primary static class for working with application data storage.

Properties
Name Type Description
Path AbsoluteDirectoryPath The path where persistent data is stored for this application
Methods
Name Return Type Description
WriteText<T>(T appData, string text) void Writes text to an app data file with backup safety
ReadText<T>(T appData) string Reads text from an app data file
QueueSave<T>(this T appData) void Queues a save operation for the app data
SaveIfRequired<T>(this T appData) void Saves the app data if required based on debounce settings

AppData<T> Generic Abstract Class

Base class for app data storage implementations.

Properties
Name Type Description
FilePath AbsoluteFilePath The file path for the app data file
Methods
Name Return Type Description
Get() T Gets the current instance of the app data
LoadOrCreate() T Loads app data from file or creates a new instance
Save() void Saves the app data to the file system
QueueSave() void Queues a save operation for the current app data instance
SaveIfRequired() void Saves the app data if required based on debounce settings

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

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 (4)

Showing the top 4 NuGet packages that depend on ktsu.AppDataStorage:

Package Downloads
ktsu.CredentialCache

CredentialCache

ktsu.SingleAppInstance

A .NET library that ensures only one instance of your application is running at a time.

ktsu.GitIntegration

Git Integration

ktsu.BlastMerge

Cross-repository file synchronization tool that uses intelligent iterative merging to unify multiple file versions with interactive conflict resolution. Features include batch processing with custom search paths and exclusion patterns, parallel file hashing for performance, persistent command history, and comprehensive automation capabilities for multi-repository workflows. Supports advanced diff visualization, pattern-based file discovery, and discrete processing phases with real-time progress reporting.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.15.7-pre.1 349 5/22/2025 1.15.7-pre.1 is deprecated because it is no longer maintained.
1.15.6 2,007 5/22/2025 1.15.6 is deprecated because it is no longer maintained.
1.15.5 573 5/21/2025 1.15.5 is deprecated because it is no longer maintained.
1.15.5-pre.1 194 5/20/2025 1.15.5-pre.1 is deprecated because it is no longer maintained.
1.15.4 431 5/19/2025 1.15.4 is deprecated because it is no longer maintained.
1.15.0 514 4/29/2025 1.15.0 is deprecated because it is no longer maintained.
1.13.0 251 4/28/2025 1.13.0 is deprecated because it is no longer maintained.
1.12.0 249 4/28/2025 1.12.0 is deprecated because it is no longer maintained.
1.11.0 268 4/27/2025 1.11.0 is deprecated because it is no longer maintained.
1.10.0 225 4/27/2025 1.10.0 is deprecated because it is no longer maintained.
1.9.0 232 4/27/2025 1.9.0 is deprecated because it is no longer maintained.
1.8.0 182 4/26/2025 1.8.0 is deprecated because it is no longer maintained.
1.7.3-pre.6 133 4/26/2025 1.7.3-pre.6 is deprecated because it is no longer maintained.
1.7.3-pre.5 135 4/25/2025 1.7.3-pre.5 is deprecated because it is no longer maintained.
1.7.3-pre.4 194 4/25/2025 1.7.3-pre.4 is deprecated because it is no longer maintained.
1.7.3-pre.3 200 4/21/2025 1.7.3-pre.3 is deprecated because it is no longer maintained.
1.7.3-pre.2 205 4/10/2025 1.7.3-pre.2 is deprecated because it is no longer maintained.
1.7.3-pre.1 207 4/7/2025 1.7.3-pre.1 is deprecated because it is no longer maintained.
1.7.2 626 4/4/2025 1.7.2 is deprecated because it is no longer maintained.
1.7.2-pre.1 209 3/31/2025 1.7.2-pre.1 is deprecated because it is no longer maintained.
1.7.1 350 3/30/2025 1.7.1 is deprecated because it is no longer maintained.
1.7.0 754 3/30/2025 1.7.0 is deprecated because it is no longer maintained.
1.6.0 253 3/30/2025 1.6.0 is deprecated because it is no longer maintained.
1.5.1-pre.8 153 3/29/2025 1.5.1-pre.8 is deprecated because it is no longer maintained.
1.5.1-pre.7 540 3/25/2025 1.5.1-pre.7 is deprecated because it is no longer maintained.
1.5.1-pre.6 190 3/15/2025 1.5.1-pre.6 is deprecated because it is no longer maintained.
1.5.1-pre.5 131 3/14/2025 1.5.1-pre.5 is deprecated because it is no longer maintained.
1.5.1-pre.4 253 3/3/2025 1.5.1-pre.4 is deprecated because it is no longer maintained.
1.5.1-pre.3 147 2/25/2025 1.5.1-pre.3 is deprecated because it is no longer maintained.
1.5.1-pre.2 160 2/18/2025 1.5.1-pre.2 is deprecated because it is no longer maintained.
1.5.1-pre.1 150 2/17/2025 1.5.1-pre.1 is deprecated because it is no longer maintained.
1.5.0 1,135 2/14/2025 1.5.0 is deprecated because it is no longer maintained.
1.4.8-pre.3 146 2/6/2025 1.4.8-pre.3 is deprecated because it is no longer maintained.
1.4.8-pre.2 145 2/5/2025 1.4.8-pre.2 is deprecated because it is no longer maintained.
1.4.8-pre.1 136 2/5/2025 1.4.8-pre.1 is deprecated because it is no longer maintained.
1.4.7 1,070 1/3/2025 1.4.7 is deprecated because it is no longer maintained.
1.4.7-pre.27 145 2/3/2025 1.4.7-pre.27 is deprecated because it is no longer maintained.
1.4.7-pre.26 142 2/3/2025 1.4.7-pre.26 is deprecated because it is no longer maintained.
1.4.7-pre.25 141 2/3/2025 1.4.7-pre.25 is deprecated because it is no longer maintained.
1.4.7-pre.24 143 2/2/2025 1.4.7-pre.24 is deprecated because it is no longer maintained.
1.4.7-pre.23 138 1/31/2025 1.4.7-pre.23 is deprecated because it is no longer maintained.
1.4.7-pre.22 141 1/30/2025 1.4.7-pre.22 is deprecated because it is no longer maintained.
1.4.7-pre.21 130 1/29/2025 1.4.7-pre.21 is deprecated because it is no longer maintained.
1.4.7-pre.20 137 1/28/2025 1.4.7-pre.20 is deprecated because it is no longer maintained.
1.4.7-pre.19 136 1/27/2025 1.4.7-pre.19 is deprecated because it is no longer maintained.
1.4.7-pre.18 136 1/26/2025 1.4.7-pre.18 is deprecated because it is no longer maintained.
1.4.7-pre.17 138 1/24/2025 1.4.7-pre.17 is deprecated because it is no longer maintained.
1.4.7-pre.16 142 1/22/2025 1.4.7-pre.16 is deprecated because it is no longer maintained.
1.4.7-pre.15 127 1/20/2025 1.4.7-pre.15 is deprecated because it is no longer maintained.
1.4.7-pre.14 131 1/18/2025 1.4.7-pre.14 is deprecated because it is no longer maintained.
1.4.7-pre.13 135 1/16/2025 1.4.7-pre.13 is deprecated because it is no longer maintained.
1.4.7-pre.12 119 1/14/2025 1.4.7-pre.12 is deprecated because it is no longer maintained.
1.4.7-pre.11 132 1/13/2025 1.4.7-pre.11 is deprecated because it is no longer maintained.
1.4.7-pre.10 140 1/11/2025 1.4.7-pre.10 is deprecated because it is no longer maintained.
1.4.7-pre.9 132 1/10/2025 1.4.7-pre.9 is deprecated because it is no longer maintained.
1.4.7-pre.8 135 1/10/2025 1.4.7-pre.8 is deprecated because it is no longer maintained.
1.4.7-pre.7 130 1/8/2025 1.4.7-pre.7 is deprecated because it is no longer maintained.
1.4.7-pre.6 140 1/7/2025 1.4.7-pre.6 is deprecated because it is no longer maintained.
1.4.7-pre.5 147 1/5/2025 1.4.7-pre.5 is deprecated because it is no longer maintained.
1.4.7-pre.4 160 1/3/2025 1.4.7-pre.4 is deprecated because it is no longer maintained.
1.4.7-pre.3 146 1/3/2025 1.4.7-pre.3 is deprecated because it is no longer maintained.
1.4.7-pre.2 147 1/3/2025 1.4.7-pre.2 is deprecated because it is no longer maintained.
1.4.7-pre.1 150 1/3/2025 1.4.7-pre.1 is deprecated because it is no longer maintained.
1.4.6 207 1/2/2025 1.4.6 is deprecated because it is no longer maintained.
1.4.5 200 1/2/2025 1.4.5 is deprecated because it is no longer maintained.
1.4.4 195 1/2/2025 1.4.4 is deprecated because it is no longer maintained.
1.4.3 185 1/2/2025 1.4.3 is deprecated because it is no longer maintained.
1.4.2 192 1/2/2025 1.4.2 is deprecated because it is no longer maintained.
1.4.1 183 1/2/2025 1.4.1 is deprecated because it is no longer maintained.
1.4.0 185 1/2/2025 1.4.0 is deprecated because it is no longer maintained.
1.3.16 490 1/2/2025 1.3.16 is deprecated because it is no longer maintained.
1.3.16-pre.6 151 1/2/2025 1.3.16-pre.6 is deprecated because it is no longer maintained.
1.3.16-pre.5 163 12/31/2024 1.3.16-pre.5 is deprecated because it is no longer maintained.
1.3.16-pre.4 138 12/30/2024 1.3.16-pre.4 is deprecated because it is no longer maintained.
1.3.16-pre.3 139 12/29/2024 1.3.16-pre.3 is deprecated because it is no longer maintained.
1.3.16-pre.2 143 12/28/2024 1.3.16-pre.2 is deprecated because it is no longer maintained.
1.3.16-pre.1 136 12/27/2024 1.3.16-pre.1 is deprecated because it is no longer maintained.
1.3.15 292 12/27/2024 1.3.15 is deprecated because it is no longer maintained.
1.3.14 178 12/27/2024 1.3.14 is deprecated because it is no longer maintained.
1.3.13-pre.1 142 12/27/2024 1.3.13-pre.1 is deprecated because it is no longer maintained.
1.3.12-pre.1 140 12/27/2024 1.3.12-pre.1 is deprecated because it is no longer maintained.
1.3.11-pre.1 141 12/27/2024 1.3.11-pre.1 is deprecated because it is no longer maintained.
1.3.10 220 12/26/2024 1.3.10 is deprecated because it is no longer maintained.
1.3.10-pre.1 138 12/27/2024 1.3.10-pre.1 is deprecated because it is no longer maintained.
1.3.9 219 12/26/2024 1.3.9 is deprecated because it is no longer maintained.
1.3.8 180 12/26/2024 1.3.8 is deprecated because it is no longer maintained.
1.3.7 173 12/26/2024 1.3.7 is deprecated because it is no longer maintained.
1.3.6 174 12/26/2024 1.3.6 is deprecated because it is no longer maintained.
1.3.5 182 12/26/2024 1.3.5 is deprecated because it is no longer maintained.
1.3.4 188 12/26/2024 1.3.4 is deprecated because it is no longer maintained.
1.3.3 234 12/25/2024 1.3.3 is deprecated because it is no longer maintained.
1.3.2 340 12/23/2024 1.3.2 is deprecated because it is no longer maintained.
1.3.1 204 12/23/2024 1.3.1 is deprecated because it is no longer maintained.
1.3.0 174 12/23/2024 1.3.0 is deprecated because it is no longer maintained.
1.2.4 175 12/23/2024 1.2.4 is deprecated because it is no longer maintained.
1.2.3 229 12/22/2024 1.2.3 is deprecated because it is no longer maintained.
1.2.2 180 12/22/2024 1.2.2 is deprecated because it is no longer maintained.
1.2.1 200 12/22/2024 1.2.1 is deprecated because it is no longer maintained.
1.2.0 182 12/22/2024 1.2.0 is deprecated because it is no longer maintained.
1.1.57 238 12/19/2024 1.1.57 is deprecated because it is no longer maintained.
1.1.56 228 12/19/2024 1.1.56 is deprecated because it is no longer maintained.
1.1.55 256 12/17/2024 1.1.55 is deprecated because it is no longer maintained.
1.1.54 231 12/16/2024 1.1.54 is deprecated because it is no longer maintained.
1.1.53 367 12/9/2024 1.1.53 is deprecated because it is no longer maintained.
1.1.52 267 12/6/2024 1.1.52 is deprecated because it is no longer maintained.
1.1.51 273 12/5/2024 1.1.51 is deprecated because it is no longer maintained.
1.1.50 210 12/5/2024 1.1.50 is deprecated because it is no longer maintained.
1.1.49 221 12/4/2024 1.1.49 is deprecated because it is no longer maintained.
1.1.48 263 12/2/2024 1.1.48 is deprecated because it is no longer maintained.
1.1.47 183 12/2/2024 1.1.47 is deprecated because it is no longer maintained.
1.1.46 201 12/2/2024 1.1.46 is deprecated because it is no longer maintained.
1.1.45 193 12/2/2024 1.1.45 is deprecated because it is no longer maintained.
1.1.44 193 12/2/2024 1.1.44 is deprecated because it is no longer maintained.
1.1.43 205 12/1/2024 1.1.43 is deprecated because it is no longer maintained.
1.1.42 187 12/1/2024 1.1.42 is deprecated because it is no longer maintained.
1.1.41 262 12/1/2024 1.1.41 is deprecated because it is no longer maintained.
1.1.40 194 12/1/2024 1.1.40 is deprecated because it is no longer maintained.
1.1.39 229 11/30/2024 1.1.39 is deprecated because it is no longer maintained.
1.1.38 190 11/30/2024 1.1.38 is deprecated because it is no longer maintained.
1.1.37 207 11/29/2024 1.1.37 is deprecated because it is no longer maintained.
1.1.36 226 11/28/2024 1.1.36 is deprecated because it is no longer maintained.
1.1.35 233 11/27/2024 1.1.35 is deprecated because it is no longer maintained.
1.1.34 226 11/26/2024 1.1.34 is deprecated because it is no longer maintained.
1.1.33 327 11/20/2024 1.1.33 is deprecated because it is no longer maintained.
1.1.32 223 11/19/2024 1.1.32 is deprecated because it is no longer maintained.
1.1.31 251 11/15/2024 1.1.31 is deprecated because it is no longer maintained.
1.1.30 211 11/14/2024 1.1.30 is deprecated because it is no longer maintained.
1.1.29 232 11/13/2024 1.1.29 is deprecated because it is no longer maintained.
1.1.28 221 11/12/2024 1.1.28 is deprecated because it is no longer maintained.
1.1.27 239 11/11/2024 1.1.27 is deprecated because it is no longer maintained.
1.1.26 239 11/8/2024 1.1.26 is deprecated because it is no longer maintained.
1.1.25 229 11/6/2024 1.1.25 is deprecated because it is no longer maintained.
1.1.24 223 11/5/2024 1.1.24 is deprecated because it is no longer maintained.
1.1.23 233 11/4/2024 1.1.23 is deprecated because it is no longer maintained.
1.1.22 333 11/2/2024 1.1.22 is deprecated because it is no longer maintained.
1.1.21 196 11/1/2024 1.1.21 is deprecated because it is no longer maintained.
1.1.20 478 10/18/2024 1.1.20 is deprecated because it is no longer maintained.
1.1.19 419 10/9/2024 1.1.19 is deprecated because it is no longer maintained.
1.1.18 207 10/8/2024 1.1.18 is deprecated because it is no longer maintained.
1.1.17 187 10/7/2024 1.1.17 is deprecated because it is no longer maintained.
1.1.16 205 10/4/2024 1.1.16 is deprecated because it is no longer maintained.
1.1.15 299 9/25/2024 1.1.15 is deprecated because it is no longer maintained.
1.1.14 214 9/24/2024 1.1.14 is deprecated because it is no longer maintained.
1.1.13 199 9/23/2024 1.1.13 is deprecated because it is no longer maintained.
1.1.12 215 9/20/2024 1.1.12 is deprecated because it is no longer maintained.
1.1.11 214 9/19/2024 1.1.11 is deprecated because it is no longer maintained.
1.1.10 204 9/19/2024 1.1.10 is deprecated because it is no longer maintained.
1.1.9 176 9/19/2024 1.1.9 is deprecated because it is no longer maintained.
1.1.8 213 9/19/2024 1.1.8 is deprecated because it is no longer maintained.
1.1.7 250 9/18/2024 1.1.7 is deprecated because it is no longer maintained.
1.1.6 205 9/18/2024 1.1.6 is deprecated because it is no longer maintained.
1.1.5 193 9/18/2024 1.1.5 is deprecated because it is no longer maintained.
1.1.4 203 9/18/2024 1.1.4 is deprecated because it is no longer maintained.
1.1.3 250 9/14/2024 1.1.3 is deprecated because it is no longer maintained.
1.1.2 217 9/14/2024 1.1.2 is deprecated because it is no longer maintained.

## v1.8.0 (minor)

Changes since v1.7.0:

- Add global.json for SDK configuration and update project files to use ktsu SDKs ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance changelog and versioning logic in PowerShell scripts. Added checks for non-merge commits, code changes, and commit message tags to determine version type (major, minor, patch, prerelease) for changelog generation. Updated `make-version.ps1` to streamline version increment logic based on commit presence and tags. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Dependabot workflow by adding a timeout and improving logging for PR processing. Updated the step names for clarity and ensured proper handling of PR URLs during auto-merge operations. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Get-BuildConfiguration function in PSBuild module by adding detailed logging of build configuration parameters. This update improves visibility of repository status, build settings, paths, and artifact patterns, aiding in CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Invoke-DotNetBuild function with improved logging and error handling. Added explicit logger parameters for CI output, implemented a retry mechanism with detailed verbosity on build failures, and included checks for project files to assist in diagnosing build issues. This update aims to streamline the build process and provide clearer feedback during CI/CD operations. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Invoke-DotNetPack and Invoke-ReleaseWorkflow functions to support project-specific packaging and improved error handling. Added parameters for verbosity and project selection, along with checks for project existence before packaging. Updated release workflow to conditionally skip packaging and improved logging for package creation and publishing steps. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance PSBuild module with improved version analysis and logging. Updated Get-VersionType function to provide detailed reasoning for version increments based on commit analysis. Enhanced output for version information retrieval and streamlined command execution in various functions for better visibility during CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance version tag retrieval in PSBuild module by adding logic to find the closest lower version if an exact match is not found. Improve changelog generation to skip already processed tags and ensure only valid version tags are included. ([@matt-edmondson](https://github.com/matt-edmondson))
- Improve error handling and logging in PSBuild module. Added try-catch blocks for repository information retrieval and enhanced error messages for build configuration, metadata updates, and build workflows. Introduced step headers for better traceability during CI/CD pipeline execution. ([@matt-edmondson](https://github.com/matt-edmondson))
- Improved handling of .csx file detection and enhanced tag retrieval logic to ensure proper array handling. Updated changelog generation to accommodate various tag scenarios, ensuring robust versioning checks. ([@matt-edmondson](https://github.com/matt-edmondson))
- Readd icon ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor .NET CI workflow and introduce PSBuild module for enhanced build automation. Updated GitHub Actions to streamline build, test, and release processes, including improved job naming, permissions, and environment variable management. Removed outdated PowerShell scripts for metadata handling and version management, replacing them with a comprehensive PSBuild module that supports semantic versioning, license generation, and CI/CD integration. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor .NET CI workflow to enhance build and release processes. Updated job names for clarity, improved error handling in PowerShell scripts, and added caching for NuGet packages. Introduced a new release job that packages and publishes libraries, applications, and generates release notes. Adjusted permissions and environment variables for better security and functionality. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Assert-LastExitCode calls in Invoke-DotNetRestore, Invoke-DotNetBuild, and Invoke-DotNetTest functions of PSBuild module to remove unnecessary command parameter. This change simplifies the error handling logic while maintaining clarity in logging. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor console logger parameters in Invoke-DotNetBuild, Invoke-DotNetTest, and Invoke-DotNetPack functions of PSBuild module to use a standardized format. This change enhances clarity and consistency in CI output by utilizing the Microsoft.Build.Logging.ConsoleLogger for improved logging detail. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Invoke-ReleaseWorkflow and Invoke-CIPipeline functions to ensure GitSha and WorkspacePath parameters are validated for null or empty values. Updated version information retrieval to convert GitSha to string for consistency in metadata updates. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor New-Changelog function in PSBuild module to improve tag handling by using array count for better clarity. Updated console output message to reflect the change, enhancing consistency in versioning processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PowerShell scripts for version management and metadata handling. Introduced a common module for shared functions, streamlined git configuration, and improved commit metadata processing. Updated `make-changelog.ps1` and `make-version.ps1` to utilize new functions for determining version types and managing environment variables. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor project file detection in Invoke-ReleaseWorkflow function to improve accuracy. Updated the check for .csproj files to count existing projects instead of relying on Test-Path, enhancing the robustness of the packaging process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PSBuild functions to execute .NET commands with output directed to the console for better logging in GitHub Actions. Updated Invoke-DotNetRestore, Invoke-DotNetBuild, Invoke-DotNetTest, Invoke-DotNetPack, Invoke-DotNetPublish, and Invoke-NuGetPublish functions to use the call operator for command execution, enhancing visibility of command outputs and error handling. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PSBuild module to standardize dotnet command logging. Updated logger parameters for restore, build, test, pack, and publish functions to improve output consistency and clarity in CI/CD environments. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PSBuild module to standardize output structure using PSCustomObject, enhancing error handling and improving clarity in build and version information retrieval. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor return statements in PSBuild module functions to use PSCustomObject for improved structure and clarity in returned metadata. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Update-ProjectMetadata function in PSBuild module to replace Version and CommitHash parameters with GitSha and ServerUrl. Update metadata generation process to return a hashtable containing version and release hash, enhancing clarity and consistency in CI/CD workflows. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refine console logger parameters in Invoke-DotNetRestore function of PSBuild module by removing 'Summary' from verbosity settings. This change improves output clarity and maintains consistency with previous logging updates in CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refine console logger parameters in Invoke-DotNetRestore function of PSBuild module. Updated parameters to enhance output clarity by removing unnecessary options and standardizing verbosity settings for improved consistency in CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove Directory.Build.props and Directory.Build.targets files to streamline project configuration and eliminate unused properties. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove icon to fix lfs ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove metadata update step from the release workflow in PSBuild module to streamline the process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove unnecessary --no-logo option from dotnet restore command in PSBuild module for cleaner output. This change maintains consistency with previous updates to console logger parameters. ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace Write-Output with Write-Host in PSBuild module for improved console logging consistency. This change enhances the clarity of output messages during build and versioning processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize console logger parameters in Invoke-DotNetBuild and Invoke-DotNetTest functions of PSBuild module to use quotes for improved clarity and consistency in CI output. ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize console logger parameters in PSBuild module for build, test, and pack functions. Updated verbosity settings to use 'Summary' for improved output clarity and consistency across CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize console logger parameters in PSBuild module for dotnet commands. Updated restore, pack, and publish functions to use the /p:ConsoleLoggerParameters syntax for improved clarity and consistency in output across CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize console logger parameters in PSBuild module for dotnet commands. Updated restore, test, pack, and publish functions to include ForceNoAlign and ShowTimestamp options, enhancing output clarity and consistency in CI/CD environments. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .editorconfig to include additional file types and formatting rules ([@matt-edmondson](https://github.com/matt-edmondson))
- Update AUTHORS.md handling in PSBuild module to preserve existing file and improve metadata generation logic. The script now ensures that the AUTHORS.md file is only generated if it does not already exist, while also enhancing documentation for metadata updates. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update console logger parameters in Invoke-DotNetRestore function of PSBuild module to use 'Summary' instead of 'ShowTimestamp'. This change enhances output clarity and maintains consistency with previous updates to logging settings in CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update console logger parameters in Invoke-DotNetRestore function of PSBuild module to use a standardized format. This change improves logging detail and consistency in CI output by utilizing the Microsoft.Build.Logging.ConsoleLogger. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update GitHub Actions workflow to enhance project automation. Added permissions for managing repository contents and pull requests, introduced a timeout for the add-to-project job, and improved step naming for clarity. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update GitHub release function in PSBuild module to use GitSha instead of metadata.ReleaseHash for improved accuracy in release tracking. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))
- Update PSBuild module to enhance logging verbosity for dotnet commands. Added console logger parameters for improved output during restore, build, test, pack, and publish operations, ensuring better visibility in CI/CD processes. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update PSBuild module to make ServerUrl parameter mandatory and enable debugging in CI/CD pipeline function for enhanced traceability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update PSBuild module to use PSCustomObject for output types and adjust verbosity levels in dotnet commands for improved logging clarity. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update PSBuild module with enhanced documentation, improved error handling, and refined function exports. Added detailed usage instructions and author information, updated command execution for better error reporting, and improved parameter descriptions for clarity. This refactor aims to streamline the CI/CD pipeline process for .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README with improved documentation and API reference ([@matt-edmondson](https://github.com/matt-edmondson))
- Update version component checks in PSBuild module to use array count for improved clarity and consistency. This change enhances the handling of versioning and changelog generation processes. ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.7.2 (patch)

Changes since v1.7.1:

- Update .editorconfig to include additional file types and formatting rules ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.7.1 (minor)

Changes since v1.7.0:

- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.7.0 (minor)

Changes since v1.6.0:

- Refactor AppData locking mechanism and improve README ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.6.0 (minor)

Changes since v1.5.0:

- Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.0 (minor)

Changes since v1.4.0:

- Add changelog entry for changes since the specified tag in MakeNotesForRange function ([@matt-edmondson](https://github.com/matt-edmondson))
- Add logging for note generation in MakeNotesForRange function ([@matt-edmondson](https://github.com/matt-edmondson))
- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Don't serialise the lock member ([@Damon3000s](https://github.com/Damon3000s))
- Enhance changelog formatting by adding additional line breaks for improved readability ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix typo in variable name and remove unnecessary logging in make-changelog.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix typo in variable name in make-changelog.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor version type checks in MakeNotesForRange function and add exclusion for PowerShell files in make-version.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.6 (minor)

Changes since v1.4.5:

- Fix typo in variable name in make-changelog.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.5 (minor)

Changes since v1.4.4:

- Fix typo in variable name and remove unnecessary logging in make-changelog.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.4 (minor)

Changes since v1.4.3:

- Enhance changelog formatting by adding additional line breaks for improved readability ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.3 (minor)

Changes since v1.4.2:

- Add logging for note generation in MakeNotesForRange function ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.2 (minor)

Changes since v1.4.1:

- Add changelog entry for changes since the specified tag in MakeNotesForRange function ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.1 (minor)

Changes since v1.4.0:

- Refactor version type checks in MakeNotesForRange function and add exclusion for PowerShell files in make-version.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.0 (minor)

Changes since v1.3.0:

- Add VERSION_TYPE variable to MakeNotesForRange function ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix license ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix range check in MakeNotesForRange function to handle additional version format ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix regex for bot commit exclusion patterns in dotnet workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix syntax error in make-license.ps1 command in dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Modularize PowerShell scripts in dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Move IS_PRERELEASE assignment to where its actually gonna work ([@matt-edmondson](https://github.com/matt-edmondson))
- Move shared workflow into local workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor bot commit exclusion patterns in dotnet workflow for case-insensitivity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor bot commit exclusion patterns in dotnet workflow for improved clarity and case-insensitivity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor exclusion patterns in dotnet workflow for improved clarity and consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor exclusion patterns in dotnet workflow to simplify bot commit filtering ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor scripts and update workflow parameters ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove URL escaping from workflow and adjust environment variable output ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Sort git tags when retrieving the last released version in dotnet workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .mailmap for user and bot email consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .NET workflow to trigger on main and develop branches ([@matt-edmondson](https://github.com/matt-edmondson))
- Update exclusion pattern for hidden files in dotnet workflow ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.16 (minor)

Changes since v1.3.15:

- Fix syntax error in make-license.ps1 command in dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Modularize PowerShell scripts in dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .mailmap for user and bot email consistency ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.15 (minor)

Changes since v1.3.14:

- Move IS_PRERELEASE assignment to where its actually gonna work ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.14 (minor)

Changes since v1.3.12-pre.1:

- Fix regex for bot commit exclusion patterns in dotnet workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor bot commit exclusion patterns in dotnet workflow for case-insensitivity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor bot commit exclusion patterns in dotnet workflow for improved clarity and case-insensitivity ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.5 (patch)

Changes since v1.3.4:

- Fix license ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.4 (patch)

Changes since v1.3.3:

- Replace LICENSE file with LICENSE.md ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.1 (minor)

Changes since v1.3.0:

- Update .NET workflow to trigger on main and develop branches ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.0 (minor)

Changes since v1.2.0:

- Refactor AppData to use Lazy<T> for internal state ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.0 (minor)

Changes since 1.1.0:

- Add compatibility suppressions and update build properties ([@matt-edmondson](https://github.com/matt-edmondson))
- Add comprehensive tests for AppData methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Add GitHub Actions workflow to automate issue and PR management for ktsu.dev project ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new tests and update namespace in AppDataTests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new tests for StrongName and Storage classes ([@matt-edmondson](https://github.com/matt-edmondson))
- dotnet-pipeline.yml renamed to dotnet-workflow.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance AppData functionality and documentation ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance AppDataStorage docs and add new examples ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance AppDataTests with new tests and improvements ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix a crash on first launch if you dont have the app data directory ([@matt-edmondson](https://github.com/matt-edmondson))
- Make test classes and records public; update NoWarn property ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor AppData class for robustness and flexibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor tests and add null checks for deserialized data ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor TestStrongStrings for proper resource disposal ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor visibility and enhance type conversion ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StrongPaths ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dependencies ([@matt-edmondson](https://github.com/matt-edmondson))
- Update GitHub Action version in add-to-project job ([@matt-edmondson](https://github.com/matt-edmondson))
- Update MSTest.TestFramework to version 3.7.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project to target both .NET 8.0 and .NET 9.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README with Static Instance Access feature ([@matt-edmondson](https://github.com/matt-edmondson))
- Update VERSION ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.45 (minor)

Changes since v1.1.44:

- Add new tests and update namespace in AppDataTests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance AppData functionality and documentation ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance AppDataStorage docs and add new examples ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README with Static Instance Access feature ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.43 (minor)

Changes since v1.1.42:

- Add GitHub Actions workflow to automate issue and PR management for ktsu.dev project ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.40 (minor)

Changes since v1.1.39:

- Update dependencies ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.34 (minor)

Changes since v1.1.33:

- Make test classes and records public; update NoWarn property ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor visibility and enhance type conversion ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.3 (minor)

Changes since v1.0.0:

- Add reading and writing to arbitrary files within the app directory ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix a crash on first launch if you dont have the app data directory ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StrongPaths ([@matt-edmondson](https://github.com/matt-edmondson))
- Update VERSION ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.0 (minor)

Changes since 0.0.0.0:

- Add github package support ([@matt-edmondson](https://github.com/matt-edmondson))
- Add stringify convertor and update strong strings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Added readme content ([@matt-edmondson](https://github.com/matt-edmondson))
- Alpha 1 ([@matt-edmondson](https://github.com/matt-edmondson))
- Assign dependabot PRs to matt ([@matt-edmondson](https://github.com/matt-edmondson))
- Avoid double upload of symbols package ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump to version 1.0.0-alpha.10 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump version to 1.0.0-alpha.2 and add a package description ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump version to 1.0.0-alpha.9 ([@matt-edmondson](https://github.com/matt-edmondson))
- Create dependabot-merge.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Create VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Disable SourceLink in project settings ([@matt-edmondson](https://github.com/matt-edmondson))
- Dont try to push packages when building pull requests ([@matt-edmondson](https://github.com/matt-edmondson))
- dotnet 8 ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable dependabot and sourcelink ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhanced testing with mock file systems ([@matt-edmondson](https://github.com/matt-edmondson))
- Ensure appdata path exists before tests run ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix a bug where the serializer would never serialize anything, because it was missing the derived typeinfo ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix an issue where the application domain was being truncated if it was inside a namespace. Add a package description. Attempt to include source and symbols in the nuget to help with debugging. ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial commit - non working ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from .project.props to Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from AUTHORS file during build ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from VERSION when building ([@matt-edmondson](https://github.com/matt-edmondson))
- Read PackageDescription from DESCRIPTION file ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor AppData<T> deserialization ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StringifyJsonConvertorFactory ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StrongPaths ([@matt-edmondson](https://github.com/matt-edmondson))
- Take latest StrongPaths to get a bugfix ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update docs and stabilize library version ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update JSON conversion strategy in AppData ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ToStringJsonConverter to 1.0.0 ([@matt-edmondson](https://github.com/matt-edmondson))