.NET / C# - Entorno de Desarrollo¶
Guía completa para configurar un entorno de desarrollo .NET que permita a Claude Code trabajar eficazmente.
Requisitos del Sistema¶
| Componente | Versión Mínima | Recomendada |
|---|---|---|
| .NET SDK | 8.0 | 9.0 (latest) |
| Visual Studio | 2022 | 2022 17.8+ |
| VS Code | 1.80+ | Latest |
| Windows | 10 | 11 |
| macOS | 12 (Monterey) | 14 (Sonoma) |
| Linux | Ubuntu 22.04 | Ubuntu 24.04 |
Instalación del SDK¶
Windows¶
# Opción 1: Winget (recomendado)
winget install Microsoft.DotNet.SDK.9
# Opción 2: Chocolatey
choco install dotnet-sdk
# Opción 3: Descarga directa
# https://dotnet.microsoft.com/download
# Verificar instalación
dotnet --version
dotnet --list-sdks
macOS¶
Linux (Ubuntu/Debian)¶
# Añadir repositorio de Microsoft
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# Instalar SDK
sudo apt update
sudo apt install -y dotnet-sdk-9.0
# Verificar
dotnet --version
Herramientas CLI Esenciales¶
Entity Framework Core Tools¶
# Instalar globalmente
dotnet tool install --global dotnet-ef
# Actualizar si ya está instalado
dotnet tool update --global dotnet-ef
# Verificar
dotnet ef --version
# Comandos comunes que Claude Code usará:
dotnet ef migrations add NombreMigracion
dotnet ef database update
dotnet ef migrations script
dotnet ef dbcontext scaffold "ConnectionString" Npgsql.EntityFramework.PostgreSQL
Otras Herramientas Globales Útiles¶
# Formateo de código
dotnet tool install --global dotnet-format
# Análisis de código
dotnet tool install --global dotnet-outdated-tool
# Generador de reportes de cobertura
dotnet tool install --global dotnet-reportgenerator-globaltool
# HTTPS Dev Certs
dotnet dev-certs https --trust
# User Secrets
dotnet user-secrets init
dotnet user-secrets set "ConnectionStrings:Default" "Host=localhost;..."
# Listar todas las herramientas instaladas
dotnet tool list --global
IDEs y Extensiones¶
Visual Studio 2022 (Windows - Recomendado)¶
# Instalar con winget
winget install Microsoft.VisualStudio.2022.Professional
# Workloads recomendados durante instalación:
# - ASP.NET and web development
# - .NET desktop development
# - Data storage and processing
# - Azure development (opcional)
Extensiones recomendadas:
- CodeMaid - Limpieza y formateo de código
- Roslynator - Análisis estático
- GitHub Extension - Integración Git
- SQLite/SQL Server Compact Toolbox
- Productivity Power Tools
Visual Studio Code¶
# Instalar VS Code
winget install Microsoft.VisualStudioCode # Windows
brew install --cask visual-studio-code # macOS
# Extensiones obligatorias
code --install-extension ms-dotnettools.csharp
code --install-extension ms-dotnettools.csdevkit
# Extensiones recomendadas
code --install-extension ms-dotnettools.vscode-dotnet-runtime
code --install-extension kreativ-software.csharpextensions
code --install-extension jchannon.csharpextensions
code --install-extension fernandoescolar.vscode-solution-explorer
code --install-extension patcx.vscode-nuget-gallery
# Para trabajar con bases de datos
code --install-extension mtxr.sqltools
code --install-extension mtxr.sqltools-driver-pg
code --install-extension mtxr.sqltools-driver-mysql
JetBrains Rider (Alternativa multiplataforma)¶
# Windows
winget install JetBrains.Rider
# macOS
brew install --cask rider
# Incluye soporte nativo para:
# - Entity Framework
# - NuGet
# - Docker
# - Bases de datos
Bases de Datos¶
PostgreSQL (Recomendado para .NET)¶
# Windows
winget install PostgreSQL.PostgreSQL
# Añadir al PATH (PowerShell profile)
$env:PATH += ";C:\Program Files\PostgreSQL\16\bin"
# Crear base de datos de desarrollo
psql -U postgres -c "CREATE DATABASE myapp_dev;"
psql -U postgres -c "CREATE USER myapp WITH PASSWORD 'dev123';"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE myapp_dev TO myapp;"
Connection String para Entity Framework:
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Port=5432;Database=myapp_dev;Username=myapp;Password=dev123"
}
}
Paquetes NuGet necesarios:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL.Design
SQL Server (LocalDB para desarrollo)¶
# Instalar SQL Server Express LocalDB
winget install Microsoft.SQLServer.2022.Express
# O solo LocalDB (más ligero)
# Se instala con Visual Studio
# Verificar instancias
sqllocaldb info
# Crear instancia
sqllocaldb create "MSSQLLocalDB"
sqllocaldb start "MSSQLLocalDB"
Connection String:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=MyAppDb;Trusted_Connection=True;"
}
}
Paquetes NuGet:
SQLite (Para desarrollo rápido)¶
# No requiere servidor - solo el paquete NuGet
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
Connection String:
Configuración del Proyecto¶
Estructura Típica¶
MyApp/
├── src/
│ ├── MyApp.Api/ # ASP.NET Core Web API
│ │ ├── Controllers/
│ │ ├── Program.cs
│ │ └── appsettings.json
│ ├── MyApp.Core/ # Dominio y lógica de negocio
│ │ ├── Entities/
│ │ ├── Interfaces/
│ │ └── Services/
│ ├── MyApp.Infrastructure/ # EF Core, servicios externos
│ │ ├── Data/
│ │ │ ├── AppDbContext.cs
│ │ │ └── Migrations/
│ │ └── Services/
│ └── MyApp.Shared/ # DTOs, constantes
├── tests/
│ ├── MyApp.UnitTests/
│ └── MyApp.IntegrationTests/
├── MyApp.sln
└── Directory.Build.props
Crear Proyecto Nuevo¶
# Crear solución
dotnet new sln -n MyApp
# Crear proyectos
dotnet new webapi -n MyApp.Api -o src/MyApp.Api
dotnet new classlib -n MyApp.Core -o src/MyApp.Core
dotnet new classlib -n MyApp.Infrastructure -o src/MyApp.Infrastructure
dotnet new xunit -n MyApp.UnitTests -o tests/MyApp.UnitTests
# Añadir a la solución
dotnet sln add src/MyApp.Api
dotnet sln add src/MyApp.Core
dotnet sln add src/MyApp.Infrastructure
dotnet sln add tests/MyApp.UnitTests
# Añadir referencias entre proyectos
dotnet add src/MyApp.Api reference src/MyApp.Core src/MyApp.Infrastructure
dotnet add src/MyApp.Infrastructure reference src/MyApp.Core
dotnet add tests/MyApp.UnitTests reference src/MyApp.Core
Paquetes NuGet Comunes¶
# Entity Framework Core
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
# Logging
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
# Validación
dotnet add package FluentValidation.AspNetCore
# Mapping
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
# Testing
dotnet add package xunit
dotnet add package Moq
dotnet add package FluentAssertions
dotnet add package Microsoft.NET.Test.Sdk
# OpenAPI/Swagger
dotnet add package Swashbuckle.AspNetCore
# Health Checks
dotnet add package AspNetCore.HealthChecks.NpgSql
dotnet add package AspNetCore.HealthChecks.Redis
Comandos que Claude Code Ejecutará¶
Compilación y Ejecución¶
# Restaurar dependencias
dotnet restore
# Compilar
dotnet build
# Compilar en Release
dotnet build -c Release
# Ejecutar
dotnet run --project src/MyApp.Api
# Ejecutar con hot reload
dotnet watch run --project src/MyApp.Api
# Publicar
dotnet publish -c Release -o ./publish
Testing¶
# Ejecutar todos los tests
dotnet test
# Tests con cobertura
dotnet test --collect:"XPlat Code Coverage"
# Tests específicos
dotnet test --filter "FullyQualifiedName~UserServiceTests"
# Tests con output detallado
dotnet test --logger "console;verbosity=detailed"
Entity Framework¶
# Añadir migración
dotnet ef migrations add InitialCreate --project src/MyApp.Infrastructure --startup-project src/MyApp.Api
# Aplicar migraciones
dotnet ef database update --project src/MyApp.Infrastructure --startup-project src/MyApp.Api
# Revertir migración
dotnet ef database update PreviousMigrationName
# Generar script SQL
dotnet ef migrations script --idempotent -o migrations.sql
# Scaffold desde BD existente
dotnet ef dbcontext scaffold "Host=localhost;Database=mydb;Username=user;Password=pass" Npgsql.EntityFrameworkCore.PostgreSQL -o Models
NuGet¶
# Añadir paquete
dotnet add package NombrePaquete
# Añadir versión específica
dotnet add package NombrePaquete --version 1.2.3
# Listar paquetes
dotnet list package
# Actualizar paquetes
dotnet outdated
dotnet add package NombrePaquete # actualiza a última versión
Docker para .NET¶
Dockerfile Típico¶
# Build stage
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY ["src/MyApp.Api/MyApp.Api.csproj", "MyApp.Api/"]
COPY ["src/MyApp.Core/MyApp.Core.csproj", "MyApp.Core/"]
COPY ["src/MyApp.Infrastructure/MyApp.Infrastructure.csproj", "MyApp.Infrastructure/"]
RUN dotnet restore "MyApp.Api/MyApp.Api.csproj"
COPY src/ .
RUN dotnet build "MyApp.Api/MyApp.Api.csproj" -c Release -o /app/build
# Publish stage
FROM build AS publish
RUN dotnet publish "MyApp.Api/MyApp.Api.csproj" -c Release -o /app/publish
# Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApp.Api.dll"]
Docker Compose para Desarrollo¶
# docker-compose.yml
version: '3.8'
services:
api:
build:
context: .
dockerfile: src/MyApp.Api/Dockerfile
ports:
- "5000:8080"
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ConnectionStrings__DefaultConnection=Host=postgres;Database=myapp;Username=myapp;Password=dev123
depends_on:
- postgres
- redis
postgres:
image: postgres:16
environment:
POSTGRES_DB: myapp
POSTGRES_USER: myapp
POSTGRES_PASSWORD: dev123
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
Verificación del Entorno¶
# verify-dotnet-env.ps1
Write-Host "=== Verificación Entorno .NET ===" -ForegroundColor Cyan
# .NET SDK
Write-Host "`n--- .NET SDK ---" -ForegroundColor Yellow
dotnet --list-sdks
# Herramientas globales
Write-Host "`n--- Herramientas Globales ---" -ForegroundColor Yellow
dotnet tool list --global
# EF Core Tools
Write-Host "`n--- Entity Framework ---" -ForegroundColor Yellow
dotnet ef --version
# Certificados HTTPS
Write-Host "`n--- HTTPS Dev Certs ---" -ForegroundColor Yellow
dotnet dev-certs https --check
# PostgreSQL
Write-Host "`n--- PostgreSQL ---" -ForegroundColor Yellow
try { psql --version } catch { Write-Host "psql no encontrado" -ForegroundColor Red }
# Docker
Write-Host "`n--- Docker ---" -ForegroundColor Yellow
docker --version
Write-Host "`n=== Verificación Completa ===" -ForegroundColor Green
Troubleshooting¶
"The SDK 'Microsoft.NET.Sdk.Web' not found"¶
"A connection attempt failed" (PostgreSQL)¶
# Verificar que PostgreSQL está ejecutándose
Get-Service postgresql*
# Iniciar si está detenido
Start-Service postgresql-x64-16
"SSL certificate problem"¶
EF Core Migrations no encuentra el DbContext¶
# Especificar proyecto de startup
dotnet ef migrations add Test \
--project src/MyApp.Infrastructure \
--startup-project src/MyApp.Api