ktsu.Sdk 2.3.1-pre.1

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.0",
    "rollForward": "latestMinor"
  },
  "msbuild-sdks": {
    "ktsu.Sdk": "2.2.0",
    "ktsu.Sdk.ConsoleApp": "2.2.0",
    "ktsu.Sdk.App": "2.2.0"
  }
}

Or reference directly in your project file:

<Project Sdk="Microsoft.NET.Sdk">
  <Sdk Name="ktsu.Sdk" Version="2.2.0" />

  <PropertyGroup>
    <!-- Your project-specific properties -->
  </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>

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 three 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=Exe configuration
  • Single target framework (net10.0)
  • Cross-platform console optimizations

ktsu.Sdk.App

Extension SDK for GUI applications (ImGui, WinForms, WPF, etc.). Adds:

  • OutputType=WinExe on Windows (no console window)
  • OutputType=Exe on other platforms
  • Single target framework (net10.0)
  • Platform-specific runtime configurations

Detailed Usage

Setup Requirements

  1. Central Package Management: Create a Directory.Packages.props file at your solution root:
<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
</Project>
  1. 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 authors
    • VERSION.md - Version number (can be managed by build scripts)
    • DESCRIPTION.md - Package description
    • CHANGELOG.md - Release notes
    • LICENSE.md - License information
    • COPYRIGHT.md - Copyright notice
    • TAGS.md - NuGet package tags
    • README.md - Package documentation
    • AUTHORS.url - URL to author/organization
    • PROJECT.url - URL to project repository
  2. 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>
    <!-- Override target frameworks -->
    <TargetFrameworks>net10.0;net9.0</TargetFrameworks>

    <!-- Override namespace -->
    <RootNamespace>MyCompany.MyProject</RootNamespace>

    <!-- Disable nullable if needed -->
    <Nullable>disable</Nullable>

    <!-- Allow warnings in test projects -->
    <TreatWarningsAsErrors Condition="$(IsTestProject) == 'true'">false</TreatWarningsAsErrors>
  </PropertyGroup>
</Project>

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 SourceLink packages (GitHub, Azure Repos)
  • 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

Polyfill Configuration: For non-test projects, the SDK automatically enables:

  • PolyEnsure=true - Enables ensure/guard clause polyfills
  • PolyNullability=true - Enables nullability-related 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 project
  • IsCliProject - True if this is a console application
  • IsAppProject - True if this is a GUI application
  • IsTestProject - True if this is a test project

Project Type Existence:

  • PrimaryProjectExists - True if primary project was found
  • CliProjectExists - True if CLI project was found
  • AppProjectExists - True if app project was found
  • TestProjectExists - True if test project was found

Project Paths:

  • SolutionDir - Path to solution directory
  • SolutionPath - Full path to .sln file
  • SolutionName - Solution name without extension
  • PrimaryProjectPath - Path to primary project
  • TestProjectPath - Path to test project

Namespace Properties:

  • AuthorsNamespace - Namespace prefix from AUTHORS.md
  • ProjectNamespace - Namespace from directory path
  • RootNamespace - Final combined namespace
  • TestProjectNamespace - Namespace for test project

Package Properties:

  • IsPackable - True for library projects
  • IsPublishable - True for executable projects
  • IsExecutable - True if OutputType is Exe or WinExe
  • IsLibrary - True if OutputType is Library and not a test project

Use these in your project files:

<PropertyGroup>
  <!-- Example: Only pack if not a prerelease -->
  <IsPackable Condition="$(IsPrerelease) == 'true'">false</IsPackable>

  <!-- Example: Different settings for test projects -->
  <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:

  • Microsoft.SourceLink.GitHub - GitHub source linking for debugging
  • Microsoft.SourceLink.AzureRepos.Git - Azure Repos source linking

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: latest-all - All latest analyzer rules enabled
  • 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.md exists 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>
  <!-- Single target for applications -->
  <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.

No packages depend on ktsu.Sdk.

## 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-actions[bot]](https://github.com/github-actions[bot])) ## v1.8.1-pre.3 (prerelease) Changes since v1.8.1-pre.2: - Refactor changelog generation logic in PowerShell script to improve commit range determination. Enhanced handling for the newest version and added fallback for relaxed filters when no commits are found. Updated output messages for better clarity. ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.8.1-pre.2 (prerelease) Changes since v1.8.1-pre.1: - Refactor changelog generation and versioning logic in PowerShell scripts. Updated commit range handling to include the latest changes since the last tag, improved output formatting, and added fallback logic for versioning when no tags are found. ([@github-actions[bot]](https://github.com/github-actions[bot])) - Remove security analysis step from GitHub Actions workflow and update permissions accordingly. ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.8.1-pre.1 (prerelease) Changes since v1.8.0: - Enhance GitHub Actions workflow by adding security analysis and dependency detection steps. Updated permissions to include security-events and id-token for improved security scanning and dependency submission. ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.8.0 (minor) Changes since v1.7.0: - [minor] 1.8.0 ([@github-actions[bot]](https://github.com/github-actions[bot])) - [minor] Update workflow and add Demo project ([@github-actions[bot]](https://github.com/github-actions[bot])) - Remove Demo project and associated files ([@github-actions[bot]](https://github.com/github-actions[bot])) - Update project configuration and versioning scripts ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.7.1-pre.2 (prerelease) Changes since v1.7.1-pre.1: - [minor] Update workflow and add Demo project ([@github-actions[bot]](https://github.com/github-actions[bot])) - Remove Demo project and associated files ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.7.1-pre.1 (prerelease) Changes since v1.7.0: - Update project configuration and versioning scripts ([@github-actions[bot]](https://github.com/github-actions[bot])) ## v1.7.0 (minor) Changes since v1.6.0: - Update testing platform command line arguments ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.6.0 (minor) Changes since v1.5.0: - Add Sdk.Lib project and update SDK configurations ([@matt-edmondson](https://github.com/matt-edmondson)) - Update AssemblyName to use dynamic MSBuildProjectName ([@matt-edmondson](https://github.com/matt-edmondson)) - Update testing platform configuration in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.5.1 (patch) Changes since v1.5.0: - Add Sdk.Lib project and update SDK configurations ([@matt-edmondson](https://github.com/matt-edmondson)) - Update AssemblyName to use dynamic MSBuildProjectName ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.5.0 (minor) Changes since v1.4.0: - Update SDK references in Sdk.props ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.4.0 (minor) Changes since v1.3.0: - Update SDK references for versioning consistency ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.3.0 (minor) Changes since v1.2.0: - Update project files to use new SDK references ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.2.0 (minor) Changes since v1.1.0: - Add Sdk.App and Sdk.Test projects to solution ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.1.0 (major) - Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))

.NET 5.0

  • No dependencies.

.NET 6.0

  • No dependencies.

.NET 7.0

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET 9.0

  • No dependencies.

.NET 10.0

  • No dependencies.

.NET Standard 2.0

  • No dependencies.

.NET Standard 2.1

  • No dependencies.

Version Downloads Last updated
2.4.0 3 01/28/2026
2.3.1-pre.1 3 01/28/2026
2.3.0 4 01/28/2026
2.2.2-pre.4 47 01/26/2026
2.2.2-pre.3 48 01/25/2026
2.2.2-pre.2 48 01/24/2026
2.2.2-pre.1 49 01/20/2026
2.2.1 56 01/18/2026
2.2.1-pre.1 53 01/18/2026
2.2.0 54 01/18/2026
2.1.0 55 01/18/2026
2.0.0 54 01/18/2026
1.76.0 54 01/18/2026
1.75.0 109 08/26/2025
1.74.0 121 08/26/2025
1.73.0 120 08/26/2025
1.72.0 119 08/26/2025
1.71.0 121 08/26/2025
1.70.0 123 08/26/2025
1.69.0 122 08/25/2025
1.68.0 121 08/16/2025
1.67.0 119 08/16/2025
1.66.0 120 08/16/2025
1.65.0 120 08/16/2025