• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

268
Views
¿Cómo transformo appsettings.json en un proyecto .NET Core MVC?

He agregado archivos de configuración json adicionales a mi proyecto

 appsettings.DEV.json appsettings.QA.json

y los cargó en la función de Startup según el entorno:

 public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); ...

Y entiendo cómo cambiar el entorno: modificar el valor de la variable de entorno ASPNETCORE_ENVIRONMENT en las propiedades del proyecto. Sin embargo, no parece haber la posibilidad de especificar diferentes variables de entorno según la configuración, la lista desplegable está etiquetada como "N/A" y deshabilitada.

La única opción que veo es cambiar manualmente el valor de la variable de entorno, para cambiar qué configuración de aplicación se usa. Estoy seguro de que hay una manera de hacerlo automáticamente, o de lo contrario, ¿cómo usarías CI? (aparte de usar un script para cambiar la variable de entorno, tiene que haber una manera más fácil).

El objetivo aquí es configurar compilaciones automatizadas e integración continua para tres entornos: DEV, QA y PROD. DEV y QA están en la misma máquina , por lo que configurar la variable de entorno que especifica el entorno manualmente no es una opción.

Propiedades del proyecto: sección de depuración

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Determinar EnvironmentName a partir del tipo de compilación

Para cualquiera que desee establecer el nombre del entorno en función del tipo de compilación, existe el práctico .UseEnvironment(environmentName) en WebHostBuilder (que se encuentra en Program Main).

Siempre que los símbolos de compilación apropiados se establezcan en las configuraciones de compilación de su proyecto, puede hacer algo como esto para determinar el EnvironmentName:

 public static void Main(string[] args) { string environmentName; #if DEBUG environmentName = "Development"; #elif STAGING environmentName = "Staging"; #elif RELEASE environmentName = "Production"; #endif var host = new WebHostBuilder() .UseKestrel() .UseEnvironment(environmentName) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build(); host.Run(); }
about 3 years ago · Santiago Trujillo Report

0

Encontré una solución de la respuesta de Tseng, pero deseo describirla aquí para mayor claridad. La solución se encuentra en la respuesta a otra pregunta; sin embargo, la pregunta es bastante diferente (y también he ampliado la respuesta), por lo que no creo que esta pregunta deba marcarse como duplicada.

la respuesta esta aqui

La solución es configurar diferentes valores de variables de entorno en cada sitio IIS para la clave ASPNETCORE_ENVIRONMENT

Los pasos para hacerlo son:

  1. Vaya a su aplicación en IIS y elija Configuration Editor .
  2. Seleccionar Configuration Editor
  3. Elija system.webServer/aspNetCore (RC2 y RTM) o system.webServer/httpPlatform (RC1) en el cuadro combinado Section
  4. Elija Applicationhost.config ... en el cuadro combinado From .
  5. Haga clic en el elemento enviromentVariables y abra la ventana de edición.
  6. Establezca sus variables de entorno.
  7. Cierre la ventana y haga clic en Aplicar.
  8. Hecho

Alternativamente, puede modificar su archivo applicationHost.config (normalmente ubicado en C:\Windows\System32\inetsrv\config\applicationHost.config

Y agregue la siguiente entrada debajo de la etiqueta raíz <Configuration> , donde "my-iis-site" es el nombre de su sitio IIS.

 <location path="my-iis-site"> <system.webServer> <aspNetCore> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="DEV" /> </environmentVariables> </aspNetCore> </system.webServer> </location>
about 3 years ago · Santiago Trujillo Report

0

Si usa el código predeterminado en Program.cs , no necesita hacer nada más que crear los dos archivos en el proyecto.

El código predeterminado en Program.cs se ve así:

 public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build();

Esto es lo que realmente está haciendo:

 public static IWebHostBuilder CreateDefaultBuilder(string[] args) { var builder = new WebHostBuilder(); ... builder.ConfigureAppConfiguration((hostingContext, config) => { var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); }); ... return builder; }

env.EnvironmentName se establece en el valor de la variable de entorno ASPNETCORE_ENVIRONMENT , por lo que todo lo que tiene que hacer es crear el appsettings.{ASPNETCORE_ENVIRONMENT}.json y se fusionará automáticamente.

Nota adicional: para que los dos archivos se fusionen realmente, use esta sintaxis:

 var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();

no:

 var appSettings = new AppSettings(); Configuration.Bind("AppSettings", appSettings); return appSettings;

Este último no devolverá los datos combinados.

Gracias a Shawn Wildermuth por esto .

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error