ktsu.ScopedAction 1.1.2

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

ktsu.ScopedAction

A lightweight utility for executing paired actions at the start and end of code blocks.

License NuGet NuGet Downloads Build Status GitHub Stars

Introduction

ktsu.ScopedAction is a .NET utility that provides a clean way to execute actions at the beginning and end of code blocks. It leverages C#'s using statement and the IDisposable pattern to ensure that paired operations (like resource acquisition/release, state changes, or logging) are properly executed, even in the presence of exceptions.

Features

  • Paired Actions: Execute actions when entering and exiting a scope
  • Exception Safety: Cleanup actions execute even if exceptions occur
  • Lightweight: Simple API with minimal overhead
  • Flexible: Works with any action delegates
  • Extendable: Can be subclassed for specialized behaviors
  • Resource Management: Follows .NET's standard disposal pattern

Installation

Package Manager Console

Install-Package ktsu.ScopedAction

.NET CLI

dotnet add package ktsu.ScopedAction

Package Reference

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

Usage Examples

Basic Example

using ktsu.ScopedAction;

// Execute actions at the beginning and end of a scope
using (new ScopedAction(
    onOpen: () => Console.WriteLine("Entering the scope"),
    onClose: () => Console.WriteLine("Exiting the scope")))
{
    // Any code here...
    Console.WriteLine("Inside the scope");
}

// Output:
// Entering the scope
// Inside the scope
// Exiting the scope

Resource Management

// Manage resources with paired acquisition and release
public void ProcessFile(string filePath)
{
    using (new ScopedAction(
        onOpen: () => Console.WriteLine($"Opening file: {filePath}"),
        onClose: () => Console.WriteLine($"Closing file: {filePath}")))
    {
        // Process the file...
        Console.WriteLine("Processing file contents");
    }
}

Measuring Performance

// Measure and log execution time of operations
public void TimedOperation()
{
    var stopwatch = new Stopwatch();
    
    using (new ScopedAction(
        onOpen: () => stopwatch.Start(),
        onClose: () => {
            stopwatch.Stop();
            Console.WriteLine($"Operation completed in {stopwatch.ElapsedMilliseconds}ms");
        }))
    {
        // Operation to be timed
        PerformComplexCalculation();
    }
}

Advanced Usage

Temporary State Changes

// Temporarily change application state
private bool _isProcessing;

public void ProcessWithState()
{
    using (new ScopedAction(
        onOpen: () => _isProcessing = true,
        onClose: () => _isProcessing = false))
    {
        // Code that requires _isProcessing to be true
        PerformProcessing();
    }
    
    // _isProcessing is automatically reset to false here
}

Creating Custom ScopedAction Classes

// Create specialized scoped actions by extending the base class
public class LoggingScope : ScopedAction
{
    private readonly string _operationName;
    private readonly ILogger _logger;
    
    public LoggingScope(string operationName, ILogger logger)
    {
        _operationName = operationName;
        _logger = logger;
        
        _logger.LogInformation($"Starting operation: {_operationName}");
    }
    
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            _logger.LogInformation($"Completed operation: {_operationName}");
        }
        
        base.Dispose(disposing);
    }
}

// Usage
using (new LoggingScope("Data Import", logger))
{
    // Import data...
}

API Reference

ScopedAction Class

The primary class for executing actions at scope boundaries.

Constructors
Constructor Parameters Description
ScopedAction(Action? onOpen, Action? onClose) onOpen: Action executed on construction<br>onClose: Action executed on disposal Creates a new ScopedAction that executes the specified actions
ScopedAction() None Protected constructor for derived classes
Methods
Method Return Type Description
Dispose() void Executes the onClose action if not already disposed
Dispose(bool disposing) void Protected virtual method for implementing the dispose pattern

Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please make sure to update tests as appropriate.

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.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages (5)

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

Package Downloads
ktsu.ImGuiStyler

A library for expressively styling ImGui.NET interfaces.

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.DelegateTransform

A utility library for transforming values using delegates

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.3-pre.17 113 5/20/2025
1.1.3-pre.15 73 5/17/2025
1.1.3-pre.14 124 5/16/2025
1.1.3-pre.13 186 5/15/2025
1.1.3-pre.12 189 5/14/2025
1.1.3-pre.11 193 5/13/2025
1.1.3-pre.10 227 5/12/2025
1.1.3-pre.9 157 5/11/2025
1.1.3-pre.8 108 5/10/2025
1.1.3-pre.7 51 5/9/2025
1.1.3-pre.6 114 5/8/2025
1.1.3-pre.5 113 5/7/2025
1.1.3-pre.4 119 5/6/2025
1.1.3-pre.3 117 5/5/2025
1.1.3-pre.2 118 5/4/2025
1.1.3-pre.1 119 5/4/2025
1.1.2 405 5/4/2025
1.1.2-pre.1 52 4/26/2025
1.1.1 592 4/25/2025
1.1.1-pre.1 116 4/4/2025
1.1.0 1,222 3/30/2025
1.0.16-pre.2 72 3/29/2025
1.0.16-pre.1 454 3/25/2025
1.0.15 1,846 2/17/2025
1.0.15-pre.3 76 2/6/2025
1.0.15-pre.2 73 2/5/2025
1.0.15-pre.1 63 2/5/2025
1.0.14 2,402 12/27/2024
1.0.14-pre.28 65 2/3/2025
1.0.14-pre.27 62 2/3/2025
1.0.14-pre.26 65 2/1/2025
1.0.14-pre.25 64 1/30/2025
1.0.14-pre.24 57 1/28/2025
1.0.14-pre.23 65 1/26/2025
1.0.14-pre.22 57 1/24/2025
1.0.14-pre.21 62 1/22/2025
1.0.14-pre.20 59 1/20/2025
1.0.14-pre.19 56 1/18/2025
1.0.14-pre.18 52 1/16/2025
1.0.14-pre.17 40 1/14/2025
1.0.14-pre.16 62 1/13/2025
1.0.14-pre.15 59 1/11/2025
1.0.14-pre.14 57 1/10/2025
1.0.14-pre.13 62 1/10/2025
1.0.14-pre.12 50 1/8/2025
1.0.14-pre.11 66 1/7/2025
1.0.14-pre.10 65 1/6/2025
1.0.14-pre.9 85 1/4/2025
1.0.14-pre.8 70 1/3/2025
1.0.14-pre.7 71 1/3/2025
1.0.14-pre.6 68 1/3/2025
1.0.14-pre.5 76 1/2/2025
1.0.14-pre.4 90 12/31/2024
1.0.14-pre.3 66 12/29/2024
1.0.14-pre.2 59 12/28/2024
1.0.14-pre.1 65 12/27/2024
1.0.13-pre.1 63 12/27/2024
1.0.12 809 12/26/2024
1.0.11 104 12/26/2024
1.0.10 110 12/26/2024
1.0.10-pre.1 62 12/27/2024
1.0.9 102 12/26/2024
1.0.8 96 12/26/2024
1.0.7 99 12/26/2024
1.0.6 90 12/26/2024
1.0.5 934 12/23/2024
1.0.4 94 12/23/2024
1.0.3 139 12/22/2024
1.0.2 175 12/22/2024
1.0.1 664 12/12/2024
1.0.0 420 12/4/2024
1.0.0-alpha.22 273 12/2/2024
1.0.0-alpha.21 166 11/30/2024
1.0.0-alpha.20 224 11/26/2024
1.0.0-alpha.19 299 11/20/2024
1.0.0-alpha.18 341 11/13/2024
1.0.0-alpha.17 551 11/1/2024
1.0.0-alpha.16 1,001 10/4/2024
1.0.0-alpha.15 549 9/19/2024
1.0.0-alpha.14 160 9/19/2024
1.0.0-alpha.13 58 9/19/2024
1.0.0-alpha.12 67 9/19/2024
1.0.0-alpha.11 58 9/19/2024
1.0.0-alpha.10 108 9/19/2024
1.0.0-alpha.9 81 9/18/2024
1.0.0-alpha.8 76 9/18/2024
1.0.0-alpha.7 139 9/18/2024
1.0.0-alpha.6 235 9/18/2024
1.0.0-alpha.5 355 9/14/2024
1.0.0-alpha.4 76 9/14/2024

## v1.1.2 (patch)

Changes since v1.1.1:

- Update DESCRIPTION.md to clarify utility purpose and change project SDK reference in ScopedAction.csproj ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove Directory.Build.props and Directory.Build.targets files, delete unused PowerShell scripts for versioning, changelog generation, and license creation. Add copyright notice to ScopedAction.cs. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.2-pre.1 (prerelease)

Changes since v1.1.1:

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

Changes since v1.1.0:

- Update README to match standard template format ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.1-pre.1 (prerelease)

Incremental prerelease update.
## v1.1.0 (minor)

Changes since v1.0.0:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
- Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata generation and project management ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.16-pre.2 (prerelease)

Changes since v1.0.16-pre.1:

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

Changes since v1.0.15:

- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.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]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.15 (patch)

Changes since v1.0.14:

- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata generation and project management ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.15-pre.3 (prerelease)

Changes since v1.0.15-pre.2:

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

Changes since v1.0.15-pre.1:

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

Incremental prerelease update.

## v1.0.14-pre.28 (prerelease)

Changes since v1.0.14-pre.27:

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

Changes since v1.0.14-pre.26:

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

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

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

Changes since v1.0.14-pre.23:

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

Changes since v1.0.14-pre.22:
## v1.0.14-pre.22 (prerelease)

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

Changes since v1.0.14-pre.20:

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

Changes since v1.0.14-pre.19:

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

Changes since v1.0.14-pre.18:
## v1.0.14-pre.18 (prerelease)

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

Changes since v1.0.14-pre.16:

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

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

Changes since v1.0.14-pre.14:
## v1.0.14-pre.14 (prerelease)

Changes since v1.0.14-pre.13:

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

Changes since v1.0.14-pre.12:

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

Changes since v1.0.14-pre.11:
## v1.0.14-pre.11 (prerelease)

Changes since v1.0.14-pre.10:

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

Changes since v1.0.14-pre.9:
## v1.0.14-pre.9 (prerelease)

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

Changes since v1.0.14-pre.7:

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

Changes since v1.0.14-pre.6:

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

Changes since v1.0.14-pre.5:

- Add automation scripts for metadata generation and project management ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.14-pre.5 (prerelease)

Changes since v1.0.14-pre.4:
## v1.0.14-pre.4 (prerelease)

Changes since v1.0.14-pre.3:

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

Changes since v1.0.14-pre.2:
## v1.0.14-pre.2 (prerelease)

Changes since v1.0.14-pre.1:

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

Incremental prerelease update.
## v1.0.13-pre.1 (prerelease)

Changes since v1.0.12:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.12 (patch)

Changes since v1.0.11:

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

Changes since v1.0.10:

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

Changes since v1.0.9:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.10-pre.1 (prerelease)

Changes since v1.0.10:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.9 (patch)

Changes since v1.0.8:

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

Changes since v1.0.7:

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

Changes since v1.0.6:

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

Changes since v1.0.5:

- 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.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]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.5 (patch)

Changes since v1.0.4:

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

Changes since v1.0.3:

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

Changes since v1.0.2:

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

Changes since v1.0.1:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@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.0.1 (patch)

Changes since v1.0.0:

- Bump MSTest.TestAdapter from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.22 (prerelease)

Changes since v1.0.0-alpha.21:

- Update VERSION to 1.0.0-alpha.22 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.21 (prerelease)

Changes since v1.0.0-alpha.20:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.21 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.20 (prerelease)

Changes since v1.0.0-alpha.19:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Update VERSION to 1.0.0-alpha.20 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.19 (prerelease)

Changes since v1.0.0-alpha.18:

- Update VERSION to 1.0.0-alpha.19 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump Microsoft.NET.Test.Sdk in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.18 (prerelease)

Changes since v1.0.0-alpha.17:

- Bump MSTest.TestFramework from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.18 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump MSTest.TestAdapter from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.17 (prerelease)

Changes since v1.0.0-alpha.16:

- Bump MSTest.TestAdapter from 3.6.0 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.17 ([@matt-edmondson](https://github.com/matt-edmondson))
- Bump MSTest.TestFramework from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.0-alpha.16 (prerelease)

Changes since v1.0.0-alpha.15:

- Bump MSTest.TestFramework from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Update VERSION to 1.0.0-alpha.16 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.15 (prerelease)

Changes since v1.0.0-alpha.14:

- Update VERSION to 1.0.0-alpha.15 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.14 (prerelease)

Changes since v1.0.0-alpha.13:

- Update VERSION to 1.0.0-alpha.14 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.13 (prerelease)

Changes since v1.0.0-alpha.12:

- Update VERSION to 1.0.0-alpha.13 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.12 (prerelease)

Changes since v1.0.0-alpha.11:

- Update VERSION to 1.0.0-alpha.12 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.11 (prerelease)

Changes since v1.0.0-alpha.10:

- Update VERSION to 1.0.0-alpha.11 ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.10 (prerelease)

Changes since v1.0.0-alpha.9:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.9 (prerelease)

Changes since v1.0.0-alpha.8:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.8 (prerelease)

Changes since v1.0.0-alpha.7:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.7 (prerelease)

Changes since v1.0.0-alpha.6:

- Sync .github\workflows\dependabot-merge.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]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestFramework from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestAdapter from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.6 (prerelease)

Changes since v1.0.0-alpha.5:

- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.0-alpha.5 (prerelease)

Changes since v1.0.0-alpha.4:

- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0-alpha.4 (prerelease)

Incremental prerelease update.
## v1.0.0 (major)

- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- 1.0.0-alpha.4 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Add github package support ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))
- Dont automatically run the OnOpen in the trivial constructor, derived classes should call it explicitly ([@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))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Allow delegates to be set in derived constructors ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))