In an ideal world, your lovely ASP Core application would be hosted in its own container in a sandboxed environment and separating Environmental Variables for different apps would be trivial. In the real world things are sometimes a bit muddier.
Allow multiple ASP.NET Core apps to run in IIS on the same server but each have their own
ASPNETCORE_ENVIRONMENT value that is generated via a CI pipeline.
Pass the EnvironmentName parameter into the
dotnet publish command. This will generate a
web.config file for the application and include the ASPNETCORE_ENVIRONMENT property.
dotnet publish --configuration Release /p:EnvironmentName=Staging
The generated web.config file will look something similar to this:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> ... <aspNetCore ...> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </configuration>
If you already have a web.config in the root of your web app for other things (adding/removing certain headers), then this will edit that file rather than replace it.
Azure Devops Pipeline
If you're looking to do this within an AzDO Yaml Pipeline, here's a sample of the code required:
- task: DotNetCoreCLI@2 displayName: 'Publish Web Project' inputs: command: publish publishWebProjects: True arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory) /p:EnvironmentName=Staging' zipAfterPublish: true
You can find a Hosted Blazor WebAssembly sample over at my GitHub