Configuración en ASP.NET Core Mediante Archivos XML
El proceso de configuración en ASP.NET Core mediante archivos con formato XML
se realiza de forma explícita por medio del método de extensión AddXmlFile
, perteneciente al proveedor XmlConfigurationProvider
, el cual carga la configuración desde pares clave-valor en tiempo de ejecución.
La sobrecarga del método AddXmlFile
más usada es en la que se define los siguientes parámetros:
- Path: Ruta relativa de acceso al archivo
XML
. - Optional: Establece si el archivo es opcional, indicándole así al proveedor de configuración que no lance una excepción de tipo
FileNotFoundException
si no encuentra el archivo. - ReloadOnChange: Indica si el archivo se debe volver a cargar cuando su contenido cambie, sin la necesidad de volver a compilar la aplicación.
Hay que tener presente, que la recarga automática de configuración conlleva a que ASP.NET Core configure e inicie un observador de archivos en segundo plano, lo que podría ocasionar problemas de rendimiento si se tienen demasiados archivos.
Considere el siguiente archivo DbSettings.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<MongoDbSettings>
<Host>localhost</Host>
<Port>27017</Port>
</MongoDbSettings>
</configuration>
Cabe recalcar que, en .NET un archivo de configuración XML
bien formado debe contener el elemento raíz <configuration>
.
En el siguiente código se carga el archivo DbSettings.xml
:
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.Sources.Clear();
builder.Configuration.AddXmlFile("DbSettings.xml", optional: false, reloadOnChange: true);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.WriteIndented = true;
});
var app = builder.Build();
app.MapGet("/", () => app.Configuration.AsEnumerable());
app.Run();
En el código anterior:
- Se removieron o invalidaron todos los orígenes que se cargan de forma predeterminada (Archivos
appsettings.json
,appsettings.{Environment}.json
, variables de entorno, argumentos de línea de comandos, etc.) por medio del métodoClear()
. - Se añade el archivo por medio del método de extensión
AddXmlFile
. - Se configura que los elementos de configuración deben mostrarse con sangría.
[
{
"key": "MongoDbSettings",
"value": null
},
{
"key": "MongoDbSettings:Port",
"value": "27017"
},
{
"key": "MongoDbSettings:Host",
"value": "localhost"
}
]
En caso de que el archivo haya sido agregado como no opcional, y al momento de cargarlo no se encuentre, se lanzara la siguiente excepción:
System.IO.FileNotFoundException
HResult=0x80070002
Message=The configuration file 'DbSettings.xml' was not found and is not optional. The expected physical path was 'C:\ConfiguracionXmlAspNetCore\DbSettings.xml'.
Source=Microsoft.Extensions.Configuration.FileExtensions
StackTrace:
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
at Microsoft.Extensions.Configuration.ConfigurationManager.AddSource(IConfigurationSource source)
at Microsoft.Extensions.Configuration.ConfigurationManager.Microsoft.Extensions.Configuration.IConfigurationBuilder.Add(IConfigurationSource source)
at Microsoft.Extensions.Configuration.XmlConfigurationExtensions.AddXmlFile(IConfigurationBuilder builder, String path, Boolean optional, Boolean reloadOnChange)
at Program.<Main>$(String[] args) in C:\ConfiguracionXmlAspNetCore\Program.cs:line 3
Hay que tener muy presente el orden en el cual se agregan los archivos, ya que, dependiendo de eso, sus valores serán sobrescritos o reemplazados.
Artículos Relacionados
- Configuración en ASP.NET Core Mediante Archivos JSON.
- Configuración en ASP.NET Core Mediante Archivos INI.
- Configuración en ASP.NET Core Mediante Argumentos de Línea de Comandos.
- Recarga de Archivos de Configuración en ASP.NET Core.
Recursos Adicionales
- Configuración en ASP.NET Core.
- Configuración en .NET.
- Proveedor de configuración de archivo.
- Clase FileConfigurationProvider.
- Código Fuente de la Clase FileConfigurationProvider.
- Clase XmlConfigurationProvider.
- Código Fuente de la Clase XmlConfigurationProvider.
- Clase XmlConfigurationExtensions.
- Código Fuente de la Clase XmlConfigurationExtensions.