Establecí el valor "Prueba" en ASPNETCORE_ENVIRONMENT usando PowerShell, pero cuando inicio mi aplicación, obtiene el valor de launchSettings.json.

[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Test", "Machine")

Si elimino el valor de launchSettings.json, el valor cambia a "Producción", no a "Prueba".

¿Qué estoy haciendo mal?

Lo implementaré en dos aplicaciones diferentes en AWS Beanstalk y enviaré un archivo de script para cambiar la variable de entorno.

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

Mi launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:60511/",
      "sslPort": 44392
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "myapp",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MonitoraApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "myapp",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:60512"
    }
  }
}
3
Felipe Deveza 15 feb. 2018 a las 17:42

2 respuestas

La mejor respuesta

Este es un comportamiento esperado según documentos:

El entorno para el desarrollo de la máquina local se puede configurar en el archivo Properties\launchSettings.json del proyecto. Los valores del entorno establecidos en launchSettings.json anulan los valores establecidos en el entorno del sistema.

Entonces, la respuesta a su pregunta (" ¿Qué estoy haciendo mal? ") es la siguiente: se supone que no debe usar launchsettings.json en producción (así que simplemente elimínelo e ignórelo del control de fuente o modifique el script de implementación para que no copie este archivo). launchsettings.json es una herramienta que facilita las pruebas en la máquina de desarrollo.

5
Isantipov 15 feb. 2018 a las 16:48

Podría obtener el valor "Prueba" ejecutando su comando de PowerShell y el siguiente código:

var environment = Environment.GetEnvironmentVariable(
    "ASPNETCORE_ENVIRONMENT",
    EnvironmentVariableTarget.Machine);
2
Matheus Lacerda 15 feb. 2018 a las 16:34