Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 te
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-21 | ✓→✗ | ▼ Worse | 168% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 223% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 90% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 278% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 64% | 0% |
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.
> Match the workspace, then stop. The highest-value move is aligning the new project with the repo it lands in: detect CPM (Directory.Packages.props) and the target framework used by neighbouring .csproj files, and mirror both. Treat the discovered target framework as an explicit choice — pass it as --framework so template-smart-defaults won't override it; deviate only when it's incompatible with a requested feature (then flag the conflict). Do this in as few steps as possible — a --dry-run, the create, and one dotnet build to confirm is usually enough. Extra exploratory turns add cost without improving the result.
Directory.Packages.propstemplate-discovery skill; for a detailed side-by-side comparison — route to template-comparison skilltemplate-authoring skilldotnet add package directly| 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) |
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.
When a parameter the user chose implies a value for an unset related parameter, invoke the template-smart-defaults skill to resolve the gap before assembling the command line — e.g., native AOT implies a recent AOT-capable target framework, a non-None --auth choice means HTTPS must stay enabled (don't add --no-https), and --use-controllers excludes the minimal-API option. Smart defaults only fill gaps; never let them override a value the user set explicitly. The workspace framework discovered in Step 2 counts as such an explicit value — pass it to smart-defaults as the chosen --framework so it isn't treated as an unset gap; deviate only if it is incompatible with the requested feature/template (then surface the conflict to the user).
Check the existing solution structure before creating:
Directory.Packages.props.csproj filesglobal.json pinning the SDK?This ensures the new project is consistent with the workspace.
Use dotnet new <template> --dry-run to show the user what files would be created. Confirm before proceeding.
bashdotnet new webapi --name MyApi --framework net10.0 --dry-run
Use dotnet new with the template name and all parameters:
bashdotnet new webapi --name MyApi --output ./src/MyApi --framework net10.0 --auth Individual
| 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, adapt the project to Central Package Management and refresh stale versions:
Directory.Packages.props.<PackageReference Include="X" Version="Y" /> the template generated, remove the Version attribute from the .csproj (leaving <PackageReference Include="X" />).<PackageVersion Include="X" Version="Y" /> entry in Directory.Packages.props.dotnet list package --outdated and confirm the proposed bumps with the user before changing anything.index.json endpoint for that package ID lists published versions; never select a prerelease unless requested.dotnet build to confirm the centralized/refreshed versions resolve.For complex structures, create each project sequentially and wire them together:
bashdotnet 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
Install or uninstall template packages:
bashdotnet new install Microsoft.DotNet.Web.ProjectTemplates.10.0 dotnet new uninstall Microsoft.DotNet.Web.ProjectTemplates.10.0
dotnet builddotnet build at the solution levelDirectory.Packages.props has the new entriesdotnet build.csproj has no version attributes and Directory.Packages.props has matching entries| 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. |
Other measured skills in the registry, with their headline benchmark lift.