Agent skill

template-instantiation

Creates .NET projects from templates with validated parameters, smart defaults, Central Package Management adaptation, and latest NuGet version resolution. USE FOR: creating new dotnet projects, scaffolding solutions with multiple projects, installing or uninstalling template packages, creating projects that respect Directory.Packages.props (CPM), composing multi-project solutions (API + tests + library), getting latest NuGet package versions in newly created projects. DO NOT USE FOR: finding or comparing templates (use template-discovery), authoring custom templates (use template-authoring), modifying existing projects or adding NuGet packages to existing projects.

Stars 302
Forks 22

Install this agent skill to your Project

npx add-skill https://github.com/managedcode/dotnet-skills/tree/main/external-sources/upstreams/dotnet-skills/dotnet-template-engine/skills/template-instantiation

SKILL.md

Template Instantiation

This skill creates .NET projects from templates using dotnet new CLI commands, with guidance for parameter validation, Central Package Management adaptation, and multi-project composition.

When to Use

  • User asks to create a new .NET project, app, or service
  • User needs a solution with multiple projects (API + tests + library)
  • User wants to create a project that respects existing Directory.Packages.props
  • User needs to install or manage template packages

When Not to Use

  • User is searching for or comparing templates — route to template-discovery skill
  • User wants to author a custom template — route to template-authoring skill
  • User wants to add packages to an existing project — use dotnet add package directly

Inputs

Input Required Description
Template name or intent Yes Template short name (e.g., webapi) or natural-language description
Project name Yes Name for the created project
Output path Recommended Directory where the project should be created
Parameters No Template-specific parameters (e.g., --framework, --auth, --aot)

Workflow

Step 1: Resolve template and parameters

If the user provides a natural-language description, map it to a template short name (see the keyword table in the template-discovery skill). If they provide a template name, proceed directly.

Use dotnet new <template> --help to review available parameters, defaults, and types for any parameters the user did not specify.

Step 2: Analyze the workspace

Check the existing solution structure before creating:

  • Is Central Package Management (CPM) enabled? Look for Directory.Packages.props
  • What target frameworks are in use? Check existing .csproj files
  • Is there a global.json pinning the SDK?

This ensures the new project is consistent with the workspace.

Step 3: Preview the creation

Use dotnet new <template> --dry-run to show the user what files would be created. Confirm before proceeding.

bash
dotnet new webapi --name MyApi --framework net10.0 --dry-run

Step 4: Create the project

Use dotnet new with the template name and all parameters:

bash
dotnet new webapi --name MyApi --output ./src/MyApi --framework net10.0 --auth Individual

Common parameter combinations

Template Parameters Example
webapi --auth (None, Individual, SingleOrg, Windows), --aot (native AOT) dotnet new webapi -n MyApi --auth Individual --aot
webapi --use-controllers (use controllers vs minimal APIs) dotnet new webapi -n MyApi --use-controllers
blazor --interactivity (None, Server, WebAssembly, Auto), --auth dotnet new blazor -n MyApp --interactivity Server
grpc --aot (native AOT) dotnet new grpc -n MyService --aot
worker --aot (native AOT) dotnet new worker -n MyWorker --aot

Note: Use dotnet new <template> --help to see all available parameters for any template.

After creation, if the workspace uses CPM:

  1. Check .csproj for inline <PackageReference> versions
  2. Move version attributes to Directory.Packages.props as <PackageVersion> entries
  3. Remove Version attributes from the .csproj

Step 5: Multi-project composition (optional)

For complex structures, create each project sequentially and wire them together:

bash
dotnet new webapi --name MyApi --output ./src/MyApi
dotnet new xunit --name MyApi.Tests --output ./tests/MyApi.Tests
dotnet add ./tests/MyApi.Tests reference ./src/MyApi
dotnet sln add ./src/MyApi ./tests/MyApi.Tests

Step 6: Template package management

Install or uninstall template packages:

bash
dotnet new install Microsoft.DotNet.Web.ProjectTemplates.10.0
dotnet new uninstall Microsoft.DotNet.Web.ProjectTemplates.10.0

Step 7: Post-creation verification

  1. Verify the project builds: dotnet build
  2. If added to a solution, verify dotnet build at the solution level
  3. If CPM was adapted, verify Directory.Packages.props has the new entries

Validation

  • Project was created successfully with the expected files
  • Project builds cleanly with dotnet build
  • If CPM is active, .csproj has no version attributes and Directory.Packages.props has matching entries
  • Package versions in the project are current (not stale template defaults)
  • If multi-project, all projects build and reference each other correctly

Common Pitfalls

Pitfall Solution
Not checking for CPM before creating a project If Directory.Packages.props exists, dotnet new creates projects with inline versions that conflict. After creation, move versions to Directory.Packages.props and remove them from .csproj.
Creating projects without specifying the framework Always specify --framework when the template supports multiple TFMs to avoid defaulting to an older version.
Not adding the project to the solution After creation, run dotnet sln add to include the project in the solution.
Not verifying the project builds Always run dotnet build after creation to catch missing dependencies or parameter issues early.

More Info

Expand your agent's capabilities with these related and highly-rated skills.

managedcode/dotnet-skills

dotnet-project-setup

Create or reorganize .NET solutions with clean project boundaries, repeatable SDK settings, and a maintainable baseline for libraries, apps, tests, CI, and local development.

302 22
Explore
managedcode/dotnet-skills

csharp-scripts

Run single-file C# programs as scripts (file-based apps) for quick experimentation, prototyping, and concept testing. Use when the user wants to write and execute a small C# program without creating a full project.

302 22
Explore
managedcode/dotnet-skills

dotnet-pinvoke

Correctly call native (C/C++) libraries from .NET using P/Invoke and LibraryImport. Covers function signatures, string marshalling, memory lifetime, SafeHandle, and cross-platform patterns. USE FOR: writing new P/Invoke or LibraryImport declarations, reviewing or debugging existing native interop code, wrapping a C or C++ library for use in .NET, diagnosing crashes, memory leaks, or corruption at the managed/native boundary. DO NOT USE FOR: COM interop, C++/CLI mixed-mode assemblies, or pure managed code with no native dependencies.

302 22
Explore
managedcode/dotnet-skills

nuget-trusted-publishing

Set up NuGet trusted publishing (OIDC) on a GitHub Actions repo — replaces long-lived API keys with short-lived tokens. USE FOR: trusted publishing, NuGet OIDC, keyless NuGet publish, migrate from NuGet API key, NuGet/login, secure NuGet publishing. DO NOT USE FOR: publishing to private feeds or Azure Artifacts (OIDC is nuget.org only). INVOKES: shell (powershell or bash), edit, create, ask_user for guided repo setup.

302 22
Explore
managedcode/dotnet-skills

dotnet-legacy-aspnet

Maintain classic ASP.NET applications on .NET Framework, including Web Forms, older MVC, and legacy hosting patterns, while planning realistic modernization boundaries.

302 22
Explore
managedcode/dotnet-skills

dotnet-code-review

Review .NET changes for bugs, regressions, architectural drift, missing tests, incorrect async or disposal behavior, and platform-specific pitfalls before you approve or merge them.

302 22
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results