variabili-ambiente-dotnetcore

in ASPNET Core

Impostazione delle variabili d’ambiente per ASP.NET Core

ASP.NET Core utilizza la variabile d’ambiente ASPNETCORE_ENVIRONMENT per determinare l’ambiente di esecuzione corrente. I valori predefiniti che questa variabile può assumere sono Development, Staging oppure Production. Inoltre è possibile personalizzarne il valore con uno custom. Le variabili d’ambiente sono case insensitive.

WebHostBuilder è l’oggetto che consente di determinare l’ambiente in cui l’applicazione è in esecuzione. Per poter recuperare il contesto attuale è possibile utilizzare IHostingEnvironment , in modo da poter determinare un comportamento specifico in base all’ambiente. Ad esempio, nell’ambiente Production l’applicazione potrebbe abilitare la minimizzazione delle risorse, mentre in Development non eseguire nessuna particolare ottimizzazione.

ASP.NET Core può essere eseguito su Windows, OSX e Linux e la configurazione della variabile d’ambiente può essere effettuata all’interno del sistema operativo, utilizzando Visual Studio o utilizzando Visual Studio Code.

Per poter verificare il valore della variabile ASPNETCORE_ENVIRONMENT , è possibile analizzare l’output del comando:

dotnet run 
...
...
Hosting environment: Production 
...

che visualizza nelle prime righe il tipo di Hosting Environment.

E’ possibile consultare la documentazione aggiornata sulle variabili d’ambiente è consultabile qui.

Modificare la variabile d’ambiente in Visual Studio

Utilizzando Visual Studio  è possible configurare la variabile d’ambiente in modo da impostarla all’interno dei diversi steps di esecuzione (ad esempio nelle fasi di debug). Quando viene creata un’applicazione ASP.NET Core viene aggiunto al progetto il file launchSettings.json . Il formato del file è il json, che ha una maggiore flessibilità rispetto al formato xml utilizzato nelle versioni precedenti. All’interno del file vengono create delle sezioni corrispondenti alle singole configurazioni. Ogni sezione contiene al suo interno il valore di ASPNETCORE_ENVIRONMENT .

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:53980/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "TestApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Nell’esempio sono presenti due configurazioni, una denominata IIS Express ed una denominata TestApp. Ciascuna configurazione imposta con un valore differente la variabile (in entrambi i casi Development).

In Visual Studio Code esiste un file equivalente che prende il nome di launch.json che viene creato al primo debug dell’applicazione. La configurazione della variabile d’ambiente avviene all’interno della sezione denominata “.NET Core Launch (web)”:

{
   // Use IntelliSense to find out which attributes exist for C# debugging
   // Use hover for the description of the existing attributes
   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/AAAA.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ,]
}

All’interno di questa sezione è possibile impostare variabili d’ambiente aggiuntive, aggiungendo i valori sotto forma di chiave:valore all’interno della sezione env.

A volte potrebbe essere necessario impostare le variabili d’ambiente passandole alla riga di comando: utilizzando il metodo ConfigurationBuilder e AddComandLine è possibile passare i parametri direttamente dalla linea di comando.
var config = new ConfigurationBuilder()  
    .AddCommandLine(args)
    .Build();

var host = new WebHostBuilder()  
    .UseConfiguration(config)
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseKestrel()
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

Per poter abilitare questa funzionalità è necessario includere  il pacchetto Microsoft.Extensions.Configuration.CommandLine. La nuova funzione consente di passare il parametro della variabile d’ambiente nel seguente modo:

--environment "Staging"
dotnet run --environment "Staging"

Quelle descritte in precedenza sono solo alcune delle modalità di configurazione delle variabili d’ambiente in .NET Core. La lettura delle variabili d’ambiente avviene durante l’avvio dell’applicazione: è quindi necessario effettuare il riavvio per poter utilizzare (ad esempio del server Kestrel).