variable the should restarting not net enabled development deployed aspnetcore_environment asp applications app and configuration asp.net-core .net-core asp.net-core-1.0 coreclr

configuration - the - set aspnetcore_environment in appsettings



¿Cómo configurar aspnetcore_environment en el archivo de publicación? (6)

Tengo la aplicación Core ASP.NET (Web Api). La documentación ha explicado cómo trabajar con múltiples entornos , sin embargo, no pudo explicar cómo configurar aspnetcore_environment al publicar el sitio web.

Así que digamos si tengo 3 entornos de Development , Staging y Production

  1. En la aplicación web ASP.NET clásica, solía crear 3 configuraciones de compilación. Development , Staging y Production (como se muestra en la imagen de abajo). y luego 3 archivos .pubxml , uno para cada configuración. ¿Necesito usar el mismo enfoque para la ASP.NET Core también?

  2. ¿Cómo configuro aspnetcore_environment en el archivo .pubxml ?

  3. Si el enfoque especificado en la Pregunta 1 es obsoleto, ¿cuál es el enfoque alternativo? (Yo uso Jenkins para CI)

Actualización 1

Entiendo que tengo que configurar ASPNETCORE_ENVIRONMENT sin embargo, no puedo entender dónde configuramos esto. Durante el desarrollo, puedo configurar esto en el perfil en launchSettings.json , sin embargo, la pregunta era ¿cómo configuramos esto cuando publicamos para la puesta en escena o la producción? ¿Establecemos la variable de entorno en el propio servidor de destino?

Actualización 2
Encontré un artículo here que explica diferentes formas de configurar la variable de entorno. Esto respondió parcialmente a mi pregunta. Sin embargo, cuando publico la aplicación, el proceso de publicación no appsettings.{env.EnvironmentName}.json variable de entorno durante la publicación de los appsettings.{env.EnvironmentName}.json
He creado una post separada para esa pregunta.


Al alojar la aplicación en IIS, puede establecer la variable de entorno en web.config.

https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

Para generarlo en la publicación, agregue un web.config a la raíz de su proyecto, "dotnet publish" usará este archivo como la base para la que se genera en la carpeta de publicación. Entonces puede cambiar el valor en su sistema de despliegue.

<?xml version="1.0" encoding="utf-8" ?> <!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS --> <configuration> <system.webServer> <aspNetCore stdoutLogEnabled="true"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore> </system.webServer> </configuration>


Creo que no puedes hacerlo en el perfil de publicación. Debe establecer la variable de entorno, por ejemplo, ASPNETCORE_ENVIRONMENT = Staging. Tuve que hacer algo similar con una aplicación web central de aspnet en Azure. Quería tener desarrollo, puesta en escena y producción. La forma en que lo hice fue exactamente con la variable env.


Para configurar dos o más perfiles, debe crear un perfil adicional, como se menciona en un artículo vinculado , y su launchSettings.json contendrá una matriz:

"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express (Staging)": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Staging" } } }

Para poder leer la variable de entorno, debe especificarla durante el inicio y llamar al método adicional AddEnvironmentVariables para que las variables tomen medidas:

public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) // general properties .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) // specify the environment-based properties .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // do not forget to add environment variables to your config! .AddEnvironmentVariables(); Configuration = builder.Build(); } }


Puede pasar el ASPNETCORE_ENVIRONMENT deseado al comando de publicación de dotnet como un argumento usando:

/p:EnvironmentName=Staging

por ejemplo, dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

Esto generará el web.config con el entorno correcto especificado para su proyecto:

<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables>


Tenía el mismo requisito y se me ocurrieron las siguientes soluciones. Esto funciona bien con implementaciones automatizadas y requiere menos cambios de configuración.

1. Modificar el archivo de proyecto (.CsProj)

MSBuild admite la propiedad EnvironmentName que puede ayudar a establecer la variable de entorno adecuada según el entorno que desea implementar. El nombre del entorno se agregaría a web.config durante la fase de publicación.

Simplemente abra el archivo de proyecto (* .csProj) y agregue el siguiente XML.

<!-- Custom Property Group added to add the Environment name during publish The EnvironmentName property is used during the publish for the Environment variable in web.config --> <PropertyGroup Condition=" ''$(Configuration)'' == '''' Or ''$(Configuration)'' == ''Debug''"> <EnvironmentName>Development</EnvironmentName> </PropertyGroup> <PropertyGroup Condition=" ''$(Configuration)'' != '''' AND ''$(Configuration)'' != ''Debug'' "> <EnvironmentName>''$(Configuration)''</EnvironmentName> </PropertyGroup>

El código anterior agregaría el nombre del entorno como Development para configuración vacía o Debug . Para cualquier otra configuración, el nombre del entorno se seleccionará de la configuración que se seleccionó. Esto agregará el entorno ASPNETCORE_ENVIRONMENT con la configuración deseada. Puede modificar la lógica para el nombre del entorno como desee al actualizar el archivo CsProj. Más detalles here

2. Agregar la propiedad EnvironmentName en los perfiles de publicación.

También podemos agregar la propiedad <EnvironmentName> en el perfil de publicación. Abra el archivo de perfil de publicación que se encuentra en Properties/PublishProfiles/{profilename.pubxml} Esto establecerá el nombre del entorno en web.config cuando se publique el proyecto. Más detalles here

<PropertyGroup> <EnvironmentName>Development</EnvironmentName> </PropertyGroup>

Como se muestra en la imagen anterior, el entorno se puede agregar para cada configuración y el nombre de la propiedad EnvironmentName se puede cambiar en cada archivo * .pubxml.

3. Opciones de línea de comando usando la publicación dotnet

Adicionalmente, podemos pasar la propiedad EnvironmentName como una opción de línea de comando al comando de dotnet publish . El siguiente comando incluiría la variable de entorno como Development en el archivo web.config.

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development


Una forma sencilla de configurarlo en visual studio IDE.

Proyecto> Propiedades> Depurar> Variables de entorno

Por favor, no use variables de entorno de nivel de máquina en lugar del alcance de la aplicación, existe la posibilidad de que otra aplicación haga lo mismo, el cambio puede afectar a otra aplicación.