ktsu.Sdk
2.27.2
Prefix Reserved
<Sdk Name="ktsu.Sdk" Version="2.27.2" />
#:sdk ktsu.Sdk@2.27.2
ktsu.Sdk
A comprehensive, robust MSBuild-based SDK for .NET projects that standardizes configuration, metadata management, and package workflows. Features intelligent project structure detection, hierarchical solution discovery, and path-based namespace generation. Supports multiple .NET versions (.NET 5.0+, .NET Standard 2.0/2.1) with optimizations for .NET 9.0+.
Quick Start
Installation
Add the SDK to your global.json (recommended):
{
"sdk": {
"version": "10.0.100",
"rollForward": "latestFeature"
},
"msbuild-sdks": {
"MSTest.Sdk": "4.3.2",
"ktsu.Sdk": "2.26.1",
"ktsu.Sdk.ConsoleApp": "2.26.1",
"ktsu.Sdk.App": "2.26.1",
"ktsu.Sdk.Tool": "2.26.1",
"ktsu.Sdk.Windows": "2.26.1",
"ktsu.Sdk.Linux": "2.26.1",
"ktsu.Sdk.macOS": "2.26.1",
"ktsu.Sdk.iOS": "2.26.1",
"ktsu.Sdk.Android": "2.26.1"
},
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
And reference in your project file:
<Project>
<Sdk Name="Microsoft.NET.Sdk" />
<Sdk Name="ktsu.Sdk" />
<PropertyGroup>
</PropertyGroup>
</Project>
Basic Usage
For a library project:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
</Project>
For a console application:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
<Sdk Name="ktsu.Sdk.ConsoleApp" />
</Project>
For a GUI application:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
<Sdk Name="ktsu.Sdk.App" />
</Project>
For a .NET tool (distributed via dotnet tool install):
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
<Sdk Name="ktsu.Sdk.Tool" />
</Project>
For a platform-specific application (e.g. Linux), reference the matching SDK:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
<Sdk Name="ktsu.Sdk.Linux" />
</Project>
The same pattern applies to ktsu.Sdk.Windows, ktsu.Sdk.macOS,
ktsu.Sdk.iOS, and ktsu.Sdk.Android. Mobile targets require the relevant .NET
workload (dotnet workload install android ios maui), and iOS additionally
requires a macOS host with Xcode.
Key Features
🏗️ Intelligent Project Structure
- Hierarchical Solution Discovery: Automatically finds solution files up to 5 directory levels above the project
- Path-Based Namespace Generation: Creates namespaces from directory structure between solution and project
- Smart Project Detection: Automatically detects primary, console, GUI, and test project types
- Nested Project Support: Works seamlessly with deeply nested project structures
🛡️ Robust Error Handling
- Safe Array Operations: Prevents index-out-of-bounds errors in MSBuild expressions
- Null-Safe String Operations: Comprehensive null/empty checks for all string manipulations
- Graceful Fallbacks: Provides sensible defaults when metadata files or properties are missing
- Comprehensive Validation: Built-in validation for all file operations and property access
📦 Advanced Package Management
- Multi-Target Support: .NET 10.0, 9.0, 8.0, 7.0, 6.0, 5.0, .NET Standard 2.0/2.1 (default: net10.0)
- MSBuildSdk Packaging: Properly configured for MSBuild SDK project packaging
- Automatic Metadata Integration: Seamlessly includes markdown files in package metadata
- Package Validation: Built-in API compatibility and package validation
- Source Link Integration: Automatic GitHub and Azure Repos source linking for debugging
- Central Package Management: Requires and works with Directory.Packages.props
🔧 Development Workflow
- Analyzer-Enforced Requirements: Roslyn analyzers (KTSU0001/KTSU0002) ensure proper package dependencies and internals visibility with helpful diagnostics and code fixers
- Internals Visibility: Code fixer to easily add InternalsVisibleTo attributes for test projects
- GitHub Integration: Built-in support for GitHub workflows and CI/CD
- Cross-Platform Support: Compatible with Windows, macOS, and Linux
- Documentation Generation: Automated XML documentation file generation
- Strict Code Quality: Nullable enabled, warnings as errors, latest analyzer rules
SDK Components
This repository contains the following SDK packages:
ktsu.Sdk (Core)
The base SDK that all projects should reference. Provides:
- Solution and project discovery
- Namespace generation
- Metadata file integration
- Multi-target framework support
- Automatic project references
- Package configuration
- Code quality defaults
ktsu.Sdk.ConsoleApp
Extension SDK for console applications. Adds:
OutputType=Execonfiguration- Single target framework (net10.0)
- Cross-platform console optimizations
ktsu.Sdk.App
Extension SDK for GUI applications (ImGui, WinForms, WPF, etc.). Adds:
OutputType=WinExeon Windows (no console window)OutputType=Exeon other platforms- Single target framework (net10.0)
- Platform-specific runtime configurations
ktsu.Sdk.Tool
Extension SDK for applications distributed as .NET tools. Adds:
PackAsTool=true, producing aDotnetToolpackage instead of an executable- Single target framework (net10.0), since a tool package cannot multi-target
ToolCommandNamederived from the lowercased solution name — a solution namedKtsuBuildinstalls asktsubuild. SetToolCommandNameexplicitly to override, which short or generic solution names should do.- No runtime identifiers: a tool ships as one RID-agnostic, framework-dependent
package, so consumers need the .NET 10 runtime. For a standalone binary, add a
separate
ktsu.Sdk.ConsoleAppproject.
A project named {Solution}.Tool or {Solution}Tool also sets IsToolProject.
{Solution}.CLI deliberately does not — CLI projects stay console apps unless they
reference this SDK.
Note that packing any project requires the metadata files the SDK declares as package
metadata (LICENSE.md, README.md, icon.png) to exist in the solution directory.
Platform-Specific App SDKs
These extension SDKs target a single platform. They fall into two groups:
Desktop (RID-based, no extra prerequisites): build self-contained apps on
the base net10.0 runtime with the runtime identifiers narrowed to one OS.
- ktsu.Sdk.Windows —
net10.0,OutputType=WinExe, RIDswin-x64;win-x86;win-arm64 - ktsu.Sdk.Linux —
net10.0,OutputType=Exe, RIDslinux-x64;linux-arm64;linux-musl-x64;linux-musl-arm64 - ktsu.Sdk.macOS —
net10.0,OutputType=Exe, RIDsosx-x64;osx-arm64
Mobile (TFM + workload): use platform-specific target frameworks and require the corresponding .NET workload.
- ktsu.Sdk.iOS —
net10.0-ios,SupportedOSPlatformVersion=15.0. Requires theiosworkload and a macOS host with Xcode to build/run consumers. - ktsu.Sdk.Android —
net10.0-android,SupportedOSPlatformVersion=21.0. Requires theandroidworkload; builds on Linux, macOS, or Windows.
Prerequisites for mobile targets: install the workloads once with
dotnet workload install android ios maui. The SDK packages themselves carry no workload dependency — only consuming app projects do.
Detailed Usage
Setup Requirements
- Central Package Management: Create a
Directory.Packages.propsfile at your solution root:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
</Project>
Metadata Files: Create these optional markdown files at your solution root (they will be automatically included in NuGet packages):
AUTHORS.md- Used for namespace generation and package authorsVERSION.md- Version number (can be managed by build scripts)DESCRIPTION.md- Package description (checked in project directory first, then solution directory for multi-package support)CHANGELOG.md- Release notesLICENSE.md- License informationCOPYRIGHT.md- Copyright noticeTAGS.md- NuGet package tags (checked in project directory first, then solution directory for multi-package support)README.md- Package documentation (checked in project directory first, then solution directory for multi-package support)AUTHORS.url- URL to author/organizationPROJECT.url- URL to project repository (PROJECT_URL.urlis also accepted)
icon.png: Optional package icon at solution root
Overriding Defaults
The SDK provides sensible defaults, but you can override any property:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="ktsu.Sdk" />
<PropertyGroup>
<TargetFrameworks>net10.0;net9.0</TargetFrameworks>
<RootNamespace>MyCompany.MyProject</RootNamespace>
<Nullable>disable</Nullable>
<TreatWarningsAsErrors Condition="$(IsTestProject) == 'true'">false</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
Style/config file sync
By default, ktsu.Sdk syncs these files from the SDK package into the solution root during build:
.editorconfig.gitattributes.gitignore.runsettings
The sync updates files that already exist in the solution root.
When COPYRIGHT.md exists in the consumer solution root, .editorconfig is still synced but its
file_header_template line is rewritten from the full contents of COPYRIGHT.md.
To opt out:
<PropertyGroup>
<KtsuSyncStyleConfigFiles>false</KtsuSyncStyleConfigFiles>
</PropertyGroup>
Project Type Detection
The SDK automatically detects different project types in your solution:
- Primary Project: The main project of your solution (YourSolution, YourSolution.Core)
- Console Projects: Command-line interface projects (YourSolution.CLI, YourSolution.Cli, YourSolutionCli, YourSolutionCLI, YourSolution.ConsoleApp, YourSolution.Console)
- GUI App Projects: Application projects (YourSolution.App, YourSolutionApp, YourSolution.WinApp, YourSolutionWinApp, YourSolution.ImGuiApp, YourSolutionImGuiApp)
- Test Projects: Test projects (YourSolution.Test, YourSolution.Tests, YourSolutionTest, YourSolutionTests)
Each project type receives appropriate default settings, references, and output configurations (console apps vs. GUI apps).
Intelligent Namespace Generation
The SDK creates intelligent namespaces based on your project's directory structure:
Examples:
MySolution/src/Core/Utils/MyProject.csproj
→ ProjectNamespace: src.Core.Utils.MyProject
MySolution/libs/MyLib/MyLib.csproj
→ ProjectNamespace: libs.MyLib (already ends with project name)
MySolution/MyApp/MyApp.csproj
→ ProjectNamespace: MyApp (directory equals project name)
Final Namespace Pattern:
{AuthorsNamespace}.{ProjectNamespace} where AuthorsNamespace comes from AUTHORS.md
Hierarchical Solution Discovery
The SDK automatically searches for solution files up the directory hierarchy:
MyProject/ ← Level 3: Check here
├── MyProject.sln ← Found! Use this directory
└── apps/ ← Level 2: Check here
└── frontend/ ← Level 1: Check here
└── src/ ← Level 0: Start here (project directory)
└── MyApp.csproj
This enables the SDK to work with any nested project structure without configuration.
Advanced Configuration Features
Analyzer-Enforced Requirements
The SDK automatically includes the ktsu.Sdk.Analyzers package (with version synchronization) that enforces proper project configuration with helpful diagnostics and code fixers:
KTSU0001 (Error): Projects must include required standard packages
- Enforces Polyfill package for non-test projects
- Enforces compatibility packages (System.Memory, System.Threading.Tasks.Extensions) based on target framework
- Diagnostic message includes package name and version number
KTSU0002 (Error): Projects must expose internals to test projects
- Code fixer automatically adds
[assembly: InternalsVisibleTo(...)]attribute - Use Ctrl+. (Quick Actions) to apply the fix
KTSU0003 (Error): Use Ensure.NotNull over ArgumentNullException.ThrowIfNull
- ArgumentNullException.ThrowIfNull was introduced in .NET 6
- Ensure.NotNull from the Polyfill package maintains compatibility with older frameworks
- Code fixer automatically replaces the invocation
KTSU0004 (Error): Use Ensure.NotNull instead of manual null checks
- Detects patterns like
if (x == null) throw new ArgumentNullException(...) - Detects patterns like
if (x is null) throw new ArgumentNullException(...) - Detects patterns like
x ?? throw new ArgumentNullException(...) - Code fixer automatically replaces with Ensure.NotNull
KTSU0005 (Error): Orphaned PackageVersion entry in Directory.Packages.props
- Flags a centrally-managed version that no project in the solution references
- Code fixer removes the entry
- Disable with
<KtsuEnableOrphanedPackageVersionAnalysis>false</KtsuEnableOrphanedPackageVersionAnalysis>
KTSU0006 (Error): Transitive package used directly
- Flags use of a type or member that comes from a transitive dependency with no direct
PackageReference - Code fixer adds the
PackageReference, and a matchingPackageVersionunder Central Package Management - Disable with
<KtsuEnableTransitivePackageAnalysis>false</KtsuEnableTransitivePackageAnalysis>
KTSU0007 (Error): Build-time package reference is not private
- Requires
PrivateAssets="all"on the Polyfill reference in non-test projects - Polyfill is a source-embedding, build-time-only package. NuGet only omits a dependency from the
produced package when every asset kind is private, so a partial
PrivateAssetsvalue still leaks Polyfill to every downstream consumer - Code fixer sets the attribute on the
PackageReference - The other standard packages are deliberately not covered:
System.MemoryandSystem.Threading.Tasks.Extensionsare genuine runtime dependencies that must flow transitively
Polyfill Configuration: For non-test projects, the SDK automatically enables:
PolyEnsure=true- Enables ensure/guard clause polyfillsPolyNullability=true- Enables nullability-related polyfillsPolyArgumentExceptions=true- Enables argument exception polyfillsPolyStringInterpolation=true- Enables string interpolation polyfills
These analyzers ensure consistent project structure while giving you explicit control over dependencies.
Available Properties
The SDK makes these properties available for conditional logic in your project files:
Project Type Detection:
IsPrimaryProject- True if this is the main library projectIsCliProject- True if this is a console applicationIsAppProject- True if this is a GUI applicationIsToolProject- True if this is a .NET tool projectIsTestProject- True if this is a test project
Project Type Existence:
PrimaryProjectExists- True if primary project was foundCliProjectExists- True if CLI project was foundAppProjectExists- True if app project was foundToolProjectExists- True if tool project was foundTestProjectExists- True if test project was found
Project Paths:
SolutionDir- Path to solution directorySolutionPath- Full path to .sln fileSolutionName- Solution name without extensionPrimaryProjectPath- Path to primary projectTestProjectPath- Path to test project
Namespace Properties:
AuthorsNamespace- Namespace prefix from AUTHORS.mdProjectNamespace- Namespace from directory pathRootNamespace- Final combined namespaceTestProjectNamespace- Namespace for test project
Package Properties:
IsPackable- True for library projects and projects withPackAsToolIsPublishable- True for executable projectsIsExecutable- True if OutputType is Exe or WinExeIsLibrary- True if OutputType is Library and not a test project
Use these in your project files:
<PropertyGroup>
<IsPackable Condition="$(IsPrerelease) == 'true'">false</IsPackable>
<SomeProperty Condition="$(IsTestProject) == 'true'">TestValue</SomeProperty>
</PropertyGroup>
Robust Error Handling
The SDK includes comprehensive error handling to prevent common MSBuild failures:
- Safe Array Access: Prevents "index out of bounds" errors when accessing file lists or string arrays
- Null Property Checks: All string operations include null/empty validation
- File Existence Validation: All file operations verify existence before processing
- Graceful Degradation: Missing metadata files don't cause build failures
Standardized Package Creation
Library projects are automatically configured for NuGet packaging with:
- Automatic Metadata Population: Uses markdown files for package description, changelog, etc.
- Source Link Integration: Enables source code debugging for published packages
- Package Validation: Built-in API compatibility and package structure validation
- Multi-Framework Support: Targets multiple .NET versions simultaneously
Cross-Platform Compatibility
Projects are configured with multiple runtime identifiers:
- Windows:
win-x64,win-x86,win-arm64 - macOS:
osx-x64,osx-arm64 - Linux:
linux-x64,linux-arm64
Advanced Testing Support
- Automatic InternalsVisibleTo: Test projects automatically access internal members
- Test Project Detection: Identifies and configures test projects with appropriate settings
- Relaxed Warnings: Test projects suppress documentation and code style warnings
Automatic Package References
The SDK enforces (via analyzers) that projects include these NuGet packages:
Polyfills (Non-Test Projects)
- Polyfill - Modern language feature support for older frameworks, with automatic configuration for PolyEnsure and PolyNullability source generators
Compatibility Packages (Framework-Specific)
- System.Memory - For .NET Standard and .NET Framework
- System.Threading.Tasks.Extensions - For netstandard2.0, netcoreapp2.0, and .NET Framework
Analyzer Package (Non-Test Projects)
- ktsu.Sdk.Analyzers - Automatically included with version synchronization to enforce SDK requirements
Code Quality Defaults
The SDK enforces strict code quality standards by default:
Compiler Settings
- LangVersion:
latest- Use latest C# language features - Nullable:
enable- Nullable reference types enabled - TreatWarningsAsErrors:
true- All warnings treated as errors - ImplicitUsings:
enable- Implicit global usings enabled
Code Analysis
- AnalysisLevel:
10.0-all- All .NET 10 analyzer rules enabled. Pinned rather thanlatest-allso a .NET SDK update cannot turn newly-added rules into build errors (TreatWarningsAsErrorsis on). Override with<AnalysisLevel>latest-all</AnalysisLevel>to track the newest rules. - EnableNETAnalyzers:
true- .NET code analyzers enabled - EnforceCodeStyleInBuild:
true- Code style rules enforced during build
Suppressed Warnings
The following warnings are suppressed globally:
- CA1724: Type names should not match namespaces
- CA1034: Nested types should not be visible
- CA1000: Do not declare static members on generic types
- CA2260: Implement ISerializable correctly
- CA1515: Override methods should call base methods
Additional suppressions for test projects:
- CS1591: Missing XML comment
- CA2225: Operator overloads have named alternates
- IDE0022: Use expression body for methods
- IDE0058: Expression value is never used
- CA1305: Specify IFormatProvider
- CA5394: Do not use insecure randomness
- CA1707: Identifiers should not contain underscores
Runtime Configuration
- InvariantGlobalization:
true- Invariant culture for better performance - NeutralLanguage:
en-US
Troubleshooting
Package Restore Fails
Problem: NuGet restore fails with "ManagePackageVersionsCentrally is not enabled"
Solution: Ensure Directory.Packages.props exists at your solution root with ManagePackageVersionsCentrally enabled.
Namespace Generation Issues
Problem: Generated namespace doesn't match expectations
Solution:
- Check that
AUTHORS.mdexists and contains valid content - The namespace format is:
{FirstPartOfAuthors}.{PathToProject}.{ProjectName} - You can always override with
<RootNamespace>in your project file
Build Warnings as Errors
Problem: Build fails due to warnings being treated as errors
Solution: Either fix the warnings or selectively disable warnings:
<PropertyGroup>
<NoWarn>$(NoWarn);CA1234;IDE5678</NoWarn>
</PropertyGroup>
Multi-Target Framework Issues
Problem: Project builds for too many frameworks
Solution: Override TargetFrameworks for specific projects:
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TargetFrameworks></TargetFrameworks>
</PropertyGroup>
Solution Not Found
Problem: SDK reports it cannot find a solution file
Solution: The SDK searches up to 5 directory levels. Ensure your project is within 5 levels of your .sln file, or manually set <SolutionDir> in your project.
Requirements
- .NET SDK 5.0 or later (optimized for .NET SDK 10.0)
- Central Package Management (Directory.Packages.props)
License
See the LICENSE.md file for license information.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.27.2 | 8 | 8/19/2026 |
| 2.27.1 | 22 | 8/19/2026 |
| 2.27.1-pre.2 | 37 | 8/18/2026 |
| 2.27.1-pre.1 | 54 | 8/13/2026 |
| 2.27.0 | 671 | 8/13/2026 |
| 2.26.1 | 377 | 8/12/2026 |
| 2.26.0 | 148 | 8/12/2026 |
| 2.25.0 | 326 | 8/12/2026 |
| 2.24.0 | 91 | 8/12/2026 |
| 2.23.0 | 90 | 8/12/2026 |
| 2.22.0 | 130 | 8/12/2026 |
| 2.21.1 | 305 | 8/11/2026 |
| 2.21.0 | 137 | 8/11/2026 |
| 2.20.0 | 132 | 8/11/2026 |
| 2.19.0 | 140 | 8/11/2026 |
| 2.18.0 | 432 | 8/7/2026 |
| 2.17.1 | 189 | 8/7/2026 |
| 2.17.0 | 262 | 8/6/2026 |
| 2.16.2-pre.2 | 52 | 8/6/2026 |
| 2.16.2-pre.1 | 49 | 8/6/2026 |
## v2.27.2 (patch)
Changes since v2.27.1:
- docs: scope build badge to the default branch ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.27.1 (patch)
Changes since v2.27.0:
- docs: correct README, DESCRIPTION and TAGS metadata ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.27.1-pre.2 (prerelease)
Changes since v2.27.1-pre.1:
- Bump the microsoft group with 3 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.27.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.27.0 (minor)
Changes since v2.26.0:
- [minor] Fix SDK review findings and extract MSBuild task to a compiled project ([@matt-edmondson](https://github.com/matt-edmondson))
- Sync COPYRIGHT.md ([@KtsuTools](https://github.com/KtsuTools))
## v2.26.1 (patch)
Changes since v2.26.0:
- Sync COPYRIGHT.md ([@KtsuTools](https://github.com/KtsuTools))
## v2.26.0 (minor)
Changes since v2.25.0:
- Sync examples\global.json ([@KtsuTools](https://github.com/KtsuTools))
## v2.25.0 (minor)
Changes since v2.24.0:
- Add empty TargetFrameworks property to test projects ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.24.0 (minor)
Changes since v2.23.0:
- Fix TargetFrameworks property for test projects to include net10.0 ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.23.0 (minor)
Changes since v2.22.0:
- [minor] Move IsTestProject properties and update TargetFramework for test projects ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] Cap PackageReleaseNotes below NuGet's 35000 character limit ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] Credit KtsuBuild, not the retired PSBuild module ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove update-winget-manifests.ps1 script as part of project restructuring ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.22.0 (minor)
Changes since v2.21.0:
- [minor] Add KTSU0007 requiring PrivateAssets="all" on Polyfill ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] Stop the style config sync task emitting CS0162 ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.21.1 (patch)
Changes since v2.21.0:
- [patch] Stop the style config sync task emitting CS0162 ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.21.0 (minor)
Changes since v2.20.0:
- fix: standardize line endings and update .editorconfig and .gitattributes for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.20.0 (minor)
Changes since v2.19.0:
- fix: ensure package data files are copied to output directory ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.19.0 (minor)
Changes since v2.18.0:
- Sync examples\demos\Tool\icon.png ([@KtsuTools](https://github.com/KtsuTools))
- Sync icon.png ([@KtsuTools](https://github.com/KtsuTools))
## v2.18.0 (minor)
Changes since v2.17.0:
- [patch] Stop style config sync from racing across parallel builds ([@matt-edmondson](https://github.com/matt-edmondson))
- fix: restore IsTestProject condition for test project identification ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.17.1 (patch)
Changes since v2.17.0:
- [patch] Stop style config sync from racing across parallel builds ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.17.0 (minor)
Changes since v2.16.0:
- [patch] Fix ktsu.Sdk.Tool producing tool packages with no payload ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.16.2-pre.2 (prerelease)
Changes since v2.16.2-pre.1:
- Add .runsettings to SDK package sync files ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Auto-sync consumer style files with opt-out switch ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Initial plan ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Package SDK style config files and cover with test ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Plan auto-sync style config opt-out feature ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Update COPYRIGHT.md with rights and license lines ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Use consumer copyright for synced editorconfig header ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
- Use COPYRIGHT.md content for editorconfig header template ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot]))
## v2.16.2-pre.1 (prerelease)
Changes since v2.16.1:
- Sync examples\global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.16.1 (patch)
Changes since v2.16.0:
- [patch] Fix ktsu.Sdk.Tool producing tool packages with no payload ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.16.0 (minor)
Changes since v2.15.0:
- [minor] Add ktsu.Sdk.Tool for distributing applications as dotnet tools ([@matt-edmondson](https://github.com/matt-edmondson))
- docs: plan for distributing applications as dotnet tools ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.15.1 (patch)
Changes since v2.15.0:
- docs: plan for distributing applications as dotnet tools ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.15.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.15.0 (minor)
Changes since v2.14.0:
- Update IsPackable condition to use explicit string comparison ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.14.0 (minor)
Changes since v2.13.0:
- [patch] fix(package-validation): disable strict cross-TFM ApiCompat ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] fix(solution-discovery): recognize .slnx solutions when inferring SolutionDir ([@matt-edmondson](https://github.com/matt-edmondson))
- Update IsPackable condition to include PackAsTool ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.13.3-pre.2 (prerelease)
Changes since v2.13.3-pre.1:
- Modify SDK settings and add ktsu SDKs in README ([@matt-edmondson](https://github.com/matt-edmondson))
- Update SDK versions and project file reference ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.13.3-pre.1 (prerelease)
Changes since v2.13.2:
- Bump the microsoft group with 3 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.13.2 (patch)
Changes since v2.13.1:
- [patch] fix(package-validation): disable strict cross-TFM ApiCompat ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.13.1 (patch)
Changes since v2.13.0:
- [patch] fix(solution-discovery): recognize .slnx solutions when inferring SolutionDir ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.13.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.13.0 (minor)
Changes since v2.12.0:
- chore: suppress IDE0370 for multi-targeted projects ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.12.0 (minor)
Changes since v2.11.0:
- [minor] Suppress spurious SourceLink "source control information is not available" warning from leaked transitive references ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.11.0 (minor)
Changes since v2.10.0:
- [minor] Remove SourceLink packages from SDK because they are automatically included by the dotnet sdk since dotnet 8 ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] Fix false KTSU0005 orphan errors when SolutionDir lacks a trailing slash ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] KTSU0005: ignore SDK-governed packages to stop false orphan errors ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.10.2 (patch)
Changes since v2.10.1:
- [patch] KTSU0005: ignore SDK-governed packages to stop false orphan errors ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.10.1 (patch)
Changes since v2.10.0:
- [patch] Fix false KTSU0005 orphan errors when SolutionDir lacks a trailing slash ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.10.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.10.0 (minor)
Changes since v2.9.0:
- [patch] Fix KTSU0001 false-positive from editorconfig target ordering ([@matt-edmondson](https://github.com/matt-edmondson))
- Add SDK example projects and MSTest integration tests ([@Claude](https://github.com/Claude))
- CI: don't pin KTSU_TOOLSET for example integration tests ([@Claude](https://github.com/Claude))
- Fix example demos and tests after end-to-end validation ([@Claude](https://github.com/Claude))
- Mark KTSU0005/KTSU0006 as shipped analyzer rules ([@Claude](https://github.com/Claude))
## v2.9.2 (patch)
Changes since v2.9.1:
- Mark KTSU0005/KTSU0006 as shipped analyzer rules ([@Claude](https://github.com/Claude))
## v2.9.1 (patch)
Changes since v2.9.0:
- [patch] Fix KTSU0001 false-positive from editorconfig target ordering ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.9.0 (minor)
Changes since v2.8.0:
- Add KTSU0005/KTSU0006 package-hygiene analyzers and fixers ([@Claude](https://github.com/Claude))
## v2.8.1-pre.1 (prerelease)
Changes since v2.8.0:
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.8.0 (minor)
Changes since v2.7.0:
- Add platform SDK validation gate; confirm analyzer/CI need no mobile changes ([@Claude](https://github.com/Claude))
## v2.7.0 (minor)
Changes since v2.6.0:
- Add plan for iOS and Android app SDK targets ([@Claude](https://github.com/Claude))
- Add platform-specific app SDKs for iOS, Android, Windows, Linux, and macOS ([@Claude](https://github.com/Claude))
- Bump version to 2.6.1-pre.1, update COPYRIGHT.md, and add changelog entry ([@matt-edmondson](https://github.com/matt-edmondson))
- Expand plan to cover Windows, Linux, and macOS app targets ([@Claude](https://github.com/Claude))
## v2.6.2-pre.8 (prerelease)
Changes since v2.6.2-pre.7:
- Expand platform targets plan to include Windows, Linux, and macOS (#5) ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.6.2-pre.7 (prerelease)
Changes since v2.6.2-pre.6:
- Add plan for iOS and Android app SDK targets (#4) ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.6.2-pre.6 (prerelease)
Changes since v2.6.2-pre.5:
- Bump the microsoft group with 3 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.6.2-pre.5 (prerelease)
Changes since v2.6.2-pre.4:
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.6.2-pre.4 (prerelease)
Changes since v2.6.2-pre.3:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.6.2-pre.3 (prerelease)
Changes since v2.6.2-pre.2:
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.6.2-pre.2 (prerelease)
Changes since v2.6.2-pre.1:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.6.2-pre.1 (prerelease)
Changes since v2.6.1:
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.6.1 (patch)
Changes since v2.6.0:
- Bump version to 2.6.1-pre.1, update COPYRIGHT.md, and add changelog entry ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.6.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.6.0 (minor)
Changes since v2.5.0:
- Enhance SDK documentation and metadata handling ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.5.1-pre.1 (prerelease)
Changes since v2.5.0:
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.5.0 (minor)
Changes since v2.4.0:
- Fix null check code fix provider to use non-nullable argument and update Sdk.targets for additional properties ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.4.1 (patch)
Changes since v2.4.0:
- Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.4.0 (minor)
Changes since v2.3.0:
- Add ManualNullCheckAnalyzer and CodeFixProvider to enforce Ensure.NotNull usage ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.3.1-pre.1 (prerelease)
Changes since v2.3.0:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.3.0 (minor)
Changes since v2.2.0:
- Add an analyzer to enforce usage of Ensure.NotNull ([@matt-edmondson](https://github.com/matt-edmondson))
- Add check to skip non-application projects in build workflow ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.2.2-pre.4 (prerelease)
Changes since v2.2.2-pre.3:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.2.2-pre.3 (prerelease)
Changes since v2.2.2-pre.2:
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.2.2-pre.2 (prerelease)
Changes since v2.2.2-pre.1:
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v2.2.2-pre.1 (prerelease)
Changes since v2.2.1:
- Bump the microsoft group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.2.1 (patch)
Changes since v2.2.0:
- Add check to skip non-application projects in build workflow ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.2.1-pre.1 (prerelease)
Incremental prerelease update.
## v2.2.0 (minor)
Changes since v2.1.0:
- Update analyzer package reference to use dynamic version ([@matt-edmondson](https://github.com/matt-edmondson))
- Upgrade .NET SDK version from 9.0 to 10.0 across project files and documentation ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.1.0 (minor)
Changes since v2.0.0:
- Migrate PolyGuard to PolyEnsure ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.0 (major)
Changes since v1.76.0:
- [major] Add Roslyn analyzers to enforce SDK requirements and remove UseStringLengthAnalyzer ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ktsu.Sdk.Analyzers project with initial analyzer implementation and metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Add PolyGuard and PolyNullability properties for non-test projects ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance assembly name check to support strong-named assemblies in MissingInternalsVisibleToAttributeAnalyzer ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance MissingStandardPackagesAnalyzer to validate additional package references via MSBuild properties ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix attribute syntax for InternalsVisibleTo in code fix provider ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix erroneous spaces in solution discovery ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix solution directory discovery logic for great-grandparent level ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor project files to import shared configuration before SDK settings ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor RequiresSystemMemory method to simplify null checks on targetFramework ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Sdk.targets to replace {version} placeholder with actual SDK version in release script ([@matt-edmondson](https://github.com/matt-edmondson))
- Update SetPackageReferenceProperties target to run before GenerateMSBuildEditorConfigFile ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.76.0 (minor)
Changes since v1.75.0:
- Add CLAUDE.md for SDK guidance and build instructions ([@matt-edmondson](https://github.com/matt-edmondson))
- add manual triggering capability to the dotnet GitHub workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance README.md with detailed installation instructions, usage examples, and advanced configuration features for ktsu.Sdk ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package references to latest versions in Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.75.0 (minor)
Changes since v1.74.0:
- Remove System.Runtime.Numerics package reference from Sdk.targets to simplify target framework support. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.74.0 (minor)
Changes since v1.73.0:
- Replace Microsoft.Bcl.Numerics with System.Runtime.Numerics package reference in Sdk.targets and remove SuppressTfmSupportBuildWarnings property to streamline target framework support. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.73.0 (minor)
Changes since v1.72.0:
- Add SuppressTfmSupportBuildWarnings property to Sdk.targets to suppress build warnings related to target framework support. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.72.0 (minor)
Changes since v1.71.0:
- Add Microsoft.Bcl.Numerics package reference with version override in Sdk.targets for .NETStandard and .NETFramework compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.71.0 (minor)
Changes since v1.70.0:
- Refine Sdk.targets by adding conditions to Polyfill package reference and PolyGuard/PolyNullability properties to ensure they are only applied to non-test projects. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.70.0 (minor)
Changes since v1.69.0:
- Update package references in Sdk.targets with version overrides and add new properties for PolyGuard and PolyNullability to enhance project configuration. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.69.0 (minor)
Changes since v1.68.0:
- Update line ending configurations in .editorconfig and .gitattributes, and add target framework properties to Sdk.props, Sdk.App.props, and Sdk.ConsoleApp.props for improved project consistency. Also, clean up .gitignore and update scripts for better functionality. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.68.0 (minor)
Changes since v1.67.0:
- Add NoWarn property for test projects in Sdk.targets to suppress specific warnings ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.67.0 (minor)
Changes since v1.66.0:
- Consolidate target framework settings across project files by adding TargetFrameworks property to Sdk.csproj, Sdk.App.csproj, and Sdk.ConsoleApp.csproj, while removing redundant entries from Directory.Build.props and Sdk.props. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.66.0 (minor)
Changes since v1.65.0:
- Remove net9.0 target framework from Directory.Build.props and clean up unused file links in Directory.Build.targets to streamline project configuration. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove Sdk.Test project from solution to streamline project structure and eliminate obsolete configurations. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update target framework settings in project files and remove obsolete test project configurations. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.65.0 (minor)
Changes since v1.64.0:
- Enable target framework net9.0 in Sdk.props to support the latest .NET version. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Sdk solution by removing Sdk.WinApp and Sdk.WinTest projects, and adding Sdk.App project with multi-targeting support. Update Sdk.Test properties to explicitly include supported target frameworks. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove code coverage collection configuration from Sdk.props to simplify test project setup. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove commented-out test results configuration from Sdk.props to clean up project properties. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.64.0 (minor)
Changes since v1.63.0:
- Refactor Sdk.props and Sdk.targets to remove unused RunSettingsFile references and streamline package data inclusion for non-test projects. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.63.0 (minor)
Changes since v1.62.0:
- Add test results configuration and enable code coverage collection in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.62.0 (minor)
Changes since v1.61.0:
- Remove coverage-related properties and dependencies from Sdk.props to simplify test project configuration. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.61.0 (minor)
Changes since v1.60.0:
- Refine project inclusion logic in Sdk.targets to show solution scoped files only in non-test projects, enhancing clarity and organization. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.60.0 (minor)
Changes since v1.59.0:
- Refactor SDK structure by removing Sdk.Lib and updating project files to streamline SDK usage. Enhance README.md with clearer project type descriptions and usage instructions. Remove outdated version update script from workflows. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.59.0 (minor)
Changes since v1.58.0:
- Enhance SDK documentation and features in DESCRIPTION.md and README.md. Improve project structure detection, error handling, and package management capabilities. Update Sdk.props and Sdk.targets for better namespace generation and project inclusion logic. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.58.0 (minor)
Changes since v1.57.0:
- Refine conditions in Sdk.targets to improve project file inclusion logic for primary and test projects. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.57.0 (minor)
Changes since v1.56.0:
- Add publishing step for libraries to ktsu.dev in GitHub Actions workflow and refine conditions in Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.56.0 (minor)
Changes since v1.55.0:
- Update TargetFrameworks in Sdk.props to include additional frameworks for improved compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.55.0 (minor)
Changes since v1.54.0:
- Refactor SDK import statements in Sdk.props files and remove redundant imports from Sdk.targets files across multiple projects to enhance modularity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.54.0 (minor)
Changes since v1.53.0:
- Enhance SDK import statements in Sdk.targets files for multiple projects to improve modularity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.53.0 (minor)
Changes since v1.52.0:
- Refactor SDK import statements in Sdk.props files for ConsoleApp and ImGuiApp to enhance modularity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.52.0 (minor)
Changes since v1.51.0:
- Remove redundant SDK import statements from Sdk.targets files across multiple projects to streamline project configuration. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.51.0 (minor)
Changes since v1.50.0:
- Add SDK metadata and update project configurations ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.50.0 (minor)
Changes since v1.49.0:
- Remove deprecated files and update project configurations for multi-targeting support ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.49.0 (minor)
Changes since v1.48.0:
- Update project configuration and build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.48.0 (minor)
Changes since v1.47.0:
- Fix PackageReleaseNotes condition syntax in Sdk.props for NuGet compliance ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.47.0 (minor)
Changes since v1.46.0:
- Enhance PackageReleaseNotes handling in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.46.0 (minor)
Changes since v1.45.0:
- Add coverage configuration to Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.45.0 (minor)
Changes since v1.44.0:
- Add Microsoft.Testing.Extensions.CodeCoverage package reference to Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.44.0 (minor)
Changes since v1.43.0:
- Add Microsoft.NET.Sdk to Sdk.props for enhanced project configuration ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.43.0 (minor)
Changes since v1.42.0:
- Enhance test project configuration in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.42.0 (minor)
Changes since v1.41.0:
- Standardize library usage across projects in MSBuild SDK ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.41.0 (minor)
Changes since v1.40.0:
- Update SDK documentation and streamline scripts ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.40.0 (minor)
Changes since v1.39.0:
- [minor] New sdk version ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.39.1-pre.1 (prerelease)
Changes since v1.39.0:
## v1.39.0 (minor)
Changes since v1.38.0:
- Remove self-contained and single-file publish settings ([@matt-edmondson](https://github.com/matt-edmondson))
- Update configuration files and dependencies ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.38.0 (minor)
Changes since v1.37.0:
- Update SelfContained property in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.37.0 (minor)
Changes since v1.36.0:
- Enable self-contained deployment in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.36.0 (minor)
Changes since v1.35.0:
- Update runtime identifiers and publishing properties ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.35.0 (minor)
Changes since v1.34.0:
- Refactor project structure and update dependencies ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.34.0 (minor)
Changes since v1.33.0:
- Update SDK configurations and add centralized package management ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.33.0 (minor)
Changes since v1.32.0:
- Update project to .NET 9.0 and enhance configuration ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.32.0 (minor)
Changes since v1.31.0:
- Update PackageReferences in Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.31.0 (minor)
Changes since v1.30.0:
- Update package references and manage versions centrally ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.30.0 (minor)
Changes since v1.29.0:
- Cleanup: Remove unused ktsu package references ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.29.0 (minor)
Changes since v1.28.0:
- Add WinApp adk ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.28.0 (minor)
Changes since v1.27.0:
- [minor] Remove duplicate CommandLineParser package reference ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.27.0 (minor)
Changes since v1.26.0:
- [minor] Fix typo in TestProjectNamespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.26.0 (minor)
Changes since v1.25.0:
- [minor] Fix InternalsVisibleTo for tests ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.25.0 (minor)
Changes since v1.24.0:
- [minor] Fix conditionals for internals ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.24.0 (minor)
Changes since v1.23.0:
- [minor] Fix test package namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.23.0 (minor)
Changes since v1.22.0:
- [minor] Fix incorrect test package namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.22.0 (minor)
Changes since v1.21.0:
- [minor] Upgrade DeepCLone ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.21.0 (minor)
Changes since v1.20.0:
- [minor] fix version ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.20.1-pre.1 (prerelease)
Changes since v1.20.0:
## v1.20.0 (minor)
Changes since v1.19.0:
- [minor] fix versions ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.19.1-pre.1 (prerelease)
Changes since v1.19.0:
## v1.19.0 (minor)
Changes since v1.18.0:
- [minor] Downgrade TestableIO package versions ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.18.0 (minor)
Changes since v1.17.0:
- [minor] Update TestableIO packages in Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] fix package version ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.17.1 (patch)
Changes since v1.17.0:
- [patch] fix package version ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.17.1-pre.1 (prerelease)
Incremental prerelease update.
## v1.17.0 (minor)
Changes since v1.16.0:
- Refactor package references in Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.16.0 (minor)
Changes since v1.15.0:
- Enhance project existence checks in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.15.0 (minor)
Changes since v1.14.0:
- Enhance SDK documentation and features for .NET 9.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Sdk.targets to reference ktsu.Semantics instead of ktsu.SemanticString ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.14.1 (patch)
Changes since v1.14.0:
- Enhance SDK documentation and features for .NET 9.0 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.14.0 (minor)
Changes since v1.13.0:
- Update project structure and dependencies ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.13.0 (minor)
Changes since v1.12.0:
- Add MSBuildSdk packaging support to project files ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove multi-targeting for .NET frameworks ([@matt-edmondson](https://github.com/matt-edmondson))
- Update projects to target .NET 9.0 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.1 (patch)
Changes since v1.12.0:
- Add MSBuildSdk packaging support to project files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.0 (minor)
Changes since v1.11.0:
- Remove TargetFramework properties from Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.11.1-pre.2 (prerelease)
Changes since v1.11.1-pre.1:
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.11.1-pre.1 (prerelease)
Changes since v1.11.0:
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.11.0 (minor)
Changes since v1.10.0:
- [patch] Fix tags file not being shown in the solution explorer ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor primary project handling in Sdk.props and Sdk.targets ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.10.2-pre.1 (prerelease)
Changes since v1.10.1:
- Update dotnet-sdk.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.10.1 (patch)
Changes since v1.10.0:
- [patch] Fix tags file not being shown in the solution explorer ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.10.0 (minor)
Changes since v1.9.0:
- [minor] Refactor project structure for centralized settings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add TAGS.md support and enhance project metadata ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance SDK documentation and add Sdk.CLI project ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Sdk.props for output type configuration ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.9.0 (minor)
Changes since v1.8.0:
- [minor] Support primary project suffixes: Core, App, CLI ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.8.1-pre.5 (prerelease)
Changes since v1.8.1-pre.4:
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\project.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.8.1-pre.4 (prerelease)
Changes since v1.8.1-pre.3:
- Refactor changelog generation logic in PowerShell script to implement more flexible commit filtering. Added progressive fallback mechanisms to ensure commits are captured for both regular and prerelease versions, improving the accuracy of the changelog output. ([@github-action... (truncated due to NuGet length limits)