SKILL.md
Upgrading to SDK-Style Projects
Required Reference: Before proceeding, consult the .NET SDK-style project documentation for authoritative guidance on SDK-style projects.
SDK Selection Guide
Analyze project files to recommend the appropriate SDK:
| Project Type | SDK | Indicators |
|---|---|---|
| Console/Library | Microsoft.NET.Sdk |
No web/UI references |
| ASP.NET Core/Web API | Microsoft.NET.Sdk.Web |
Microsoft.AspNetCore.*, Startup.cs, Controllers |
| Razor Class Library | Microsoft.NET.Sdk.Razor |
.razor files, Razor components |
| Blazor WebAssembly | Microsoft.NET.Sdk.BlazorWebAssembly |
Microsoft.AspNetCore.Components.WebAssembly |
| Worker/Background Service | Microsoft.NET.Sdk.Worker |
IHostedService, BackgroundService |
| WinForms | Microsoft.NET.Sdk + <UseWindowsForms> |
System.Windows.Forms |
| WPF | Microsoft.NET.Sdk + <UseWPF> |
PresentationFramework, .xaml files |
| MSTest | MSTest.Sdk |
Microsoft.VisualStudio.TestTools.UnitTesting |
| .NET Aspire AppHost | Aspire.AppHost.Sdk |
Aspire orchestration project |
Analysis Checklist
Before upgrading, analyze and review:
- Project type: Console, library, web, test, desktop, or worker
- Target framework: Current TFM and desired target (e.g.,
net9.0,net48) - Package references: Check
packages.configor<Reference>with HintPath - Assembly references: GAC or local assemblies that need conversion
- Conditional compilation:
#ifdirectives, DEBUG/RELEASE configurations - Build configurations: Custom configurations beyond Debug/Release
- Pre/Post build events: Scripts in
<PreBuildEvent>or<PostBuildEvent> - Custom targets/props:
.targetsor.propsfile imports - AssemblyInfo.cs: Attributes to migrate or auto-generate
- Resources:
.resxfiles, embedded resources, content files - Project references: Other projects in solution
- COM references: ActiveX/COM interop dependencies
- WCF/ASMX references: Service references requiring migration
- Project GUIDs: Solution file references (update if changing)
- Output paths: Custom
OutputPath,IntermediateOutputPath - Signing: Strong name keys, delay signing settings
- Platform target: x86, x64, AnyCPU, ARM settings
Upgrade Process
- Identify SDK: Analyze references and file patterns to determine SDK
- Create minimal project file:
``xml <Project Sdk="SELECTED_SDK"> <PropertyGroup> <TargetFramework>net9.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> </Project> ``
- Add OutputType if executable:
<OutputType>Exe</OutputType>or<OutputType>WinExe</OutputType> - Migrate PackageReferences: Convert
packages.configor HintPath references - Remove redundant elements: SDK-style auto-includes
.cs,.resx, etc. - Add desktop properties for WinForms/WPF:
``xml <UseWindowsForms>true</UseWindowsForms> <!-- or --> <UseWPF>true</UseWPF> ``
Key Differences from Legacy
- No
<Compile Include="**/*.cs" />needed (auto-included) - No assembly info file needed (
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>default) - PackageReference replaces packages.config
- No ProjectGuid, ProjectTypeGuids required
- No explicit SDK imports needed
Validation
After upgrade, run:
dotnet build
dotnet msbuild -preprocess:output.xml # View expanded project