Configuración de aplicaciones C# (.NET): guía completa
La gestión de la configuración es una de las tareas clave en el desarrollo de aplicaciones modernas en C# (.NET). La biblioteca Microsoft.Extensions.Configuration proporciona un mecanismo potente y flexible para leer ajustes de diversas fuentes: archivos JSON, variables de entorno, argumentos de línea de comandos y secretos. En este artículo, analizaremos en detalle cómo configurar la configuración en aplicaciones .NET, utilizando las mejores prácticas y ejemplos de código.
Características principales de la biblioteca
- Múltiples fuentes de datos: JSON, XML, INI, variables de entorno, argumentos de línea de comandos, Azure Key Vault y otros.
- Estructura jerárquica: soporte para secciones anidadas mediante claves con dos puntos (
Section:Subsection:Key). - Vinculación a clases (Options Pattern): llenado automático de objetos POCO desde la configuración.
- Anulación flexible: la última fuente agregada tiene prioridad.
- Soporte para secretos: para desarrollo —
Secret Manager, para producción — almacenes seguros.
Instalación y configuración
Para trabajar con configuración en una aplicación .NET (consola, ASP.NET Core, MAUI, etc.), es necesario instalar el paquete NuGet:
dotnet add package Microsoft.Extensions.Configurationdotnet add package Microsoft.Extensions.Configuration.Jsondotnet add package Microsoft.Extensions.Configuration.EnvironmentVariablesdotnet add package Microsoft.Extensions.Configuration.CommandLineEn ASP.NET Core, estos paquetes ya están incluidos por defecto.
Ejemplo básico: lectura desde appsettings.json
Creemos un archivo appsettings.json:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyDb;User Id=sa;Password=MyPass;" }, "AppSettings": { "AppName": "MyApp", "Version": "1.0.0", "MaxRetries": 3 }}Código para leer la configuración en una aplicación de consola:
using Microsoft.Extensions.Configuration;
class Program{ static void Main(string[] args) { // Creamos la configuración var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .AddCommandLine(args) .Build();
// Lectura de valores simples string appName = configuration["AppSettings:AppName"]; Console.WriteLine($"App Name: {appName}");
// Lectura de secciones anidadas string connString = configuration.GetConnectionString("DefaultConnection"); Console.WriteLine($"Connection String: {connString}");
// Lectura de un número entero int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]); Console.WriteLine($"Max Retries: {maxRetries}");
// Obtener una sección completa var appSettingsSection = configuration.GetSection("AppSettings"); Console.WriteLine($"Version: {appSettingsSection["Version"]}"); }}Patrón Options (vinculación a clases)
La mejor práctica es usar configuración fuertemente tipada mediante IOptions<T>. Para ello:
- Cree una clase para la sección de configuración:
public class AppSettings{ public string AppName { get; set; } public string Version { get; set; } public int MaxRetries { get; set; }}- Registre la configuración en el contenedor DI (para ASP.NET Core o usando
Micros
También en la biblioteca
gRPC para TypeScript: bibliotecas, configuración y ejemplos de código
Configuración de aplicaciones Java: resumen de bibliotecas y herramientas