C# .NET Project Bootstrapper
Creates production-ready .NET 8+ projects with modern C# features and best practices.
Prerequisites
bash
# Check .NET SDK (8.0+ recommended) dotnet --version dotnet --list-sdks
Install .NET SDK
Linux (Ubuntu/Debian):
bash
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update sudo apt-get install -y dotnet-sdk-8.0
macOS:
bash
brew install --cask dotnet-sdk
Project Templates
| Template | Command | Description |
|---|---|---|
| Console App | dotnet new console | Command-line application |
| Web API | dotnet new webapi | REST API with controllers |
| Minimal API | dotnet new web | Lightweight HTTP API |
| Blazor Server | dotnet new blazorserver | Server-side Blazor app |
| Blazor WebAssembly | dotnet new blazorwasm | Client-side Blazor app |
| Class Library | dotnet new classlib | Reusable library |
| xUnit Tests | dotnet new xunit | Unit test project |
| Worker Service | dotnet new worker | Background service |
Create Projects
Console Application
bash
dotnet new console -n MyApp -o MyApp cd MyApp
Web API (Minimal API - Recommended)
bash
dotnet new web -n MyApi -o MyApi cd MyApi
Solution with Multiple Projects
bash
dotnet new sln -n MySolution dotnet new web -n MyApi -o src/MyApi dotnet new classlib -n MyCore -o src/MyCore dotnet new xunit -n MyTests -o tests/MyTests dotnet sln add src/MyApi src/MyCore tests/MyTests dotnet add src/MyApi reference src/MyCore dotnet add tests/MyTests reference src/MyCore
Project Structure
code
MySolution/ ├── MySolution.sln ├── src/ │ ├── MyApi/ │ │ ├── MyApi.csproj │ │ └── Program.cs │ └── MyCore/ │ └── MyCore.csproj ├── tests/ │ └── MyTests/ │ └── MyTests.csproj ├── .editorconfig ├── Directory.Build.props └── Directory.Packages.props
Modern .csproj Configuration
xml
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
</Project>
Directory.Build.props
Create at solution root:
xml
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<AnalysisLevel>latest-recommended</AnalysisLevel>
</PropertyGroup>
</Project>
Minimal API Example
csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapGet("/", () => "Hello World!");
app.MapGet("/items/{id}", (int id) => new Item(id, $"Item {id}"));
app.MapPost("/items", (Item item) => Results.Created($"/items/{item.Id}", item));
app.Run();
record Item(int Id, string Name);
Common NuGet Packages
bash
dotnet add package Serilog.AspNetCore dotnet add package FluentValidation.AspNetCore dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package xunit dotnet add package Moq dotnet add package FluentAssertions
Development Commands
bash
dotnet restore dotnet build dotnet run dotnet watch run # Hot reload dotnet test dotnet format dotnet publish -c Release -o ./publish
GitHub Actions CI
yaml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- run: dotnet restore
- run: dotnet build --no-restore -c Release
- run: dotnet test --no-build -c Release
Post-Setup Checklist
- • Create solution and project structure
- • Configure Directory.Build.props
- • Add .editorconfig for code style
- • Configure logging (Serilog)
- • Set up dependency injection
- • Add unit test project
- • Configure CI/CD pipeline