Reputation: 6095
I am trying to setting up multiple environments in my .NET Core 2.0 application. See my code below.
"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": "${workspaceRoot}/my.api/bin/Debug/netcoreapp2.0/my.api.dll",
"args": [],
"cwd": "${workspaceRoot}/my.api",
"stopAtEntry": false,
"requireExactSource": 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": "${workspaceRoot}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class Startup
{
public IContainer ApplicationContainer { get; private set; }
private IHostingEnvironment HostingEnvironment { get; set; }
public IConfigurationRoot Configuration { get; }
private string ConnectionString
{
get
{
return this.HostingEnvironment.IsDevelopment() ? Configuration.GetConnectionString("DefaultConnection") : Configuration.GetConnectionString("Production");
}
}
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.Azuredev.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
this.HostingEnvironment = env;
System.Console.WriteLine(env.EnvironmentName); // Here it always give me Production.
}
I tried to use command line like dotnet run --environment "Development"
So, it should run on Development Environment, but it always runs with Production, (look I have added console.writeline in my startup.cs file)
Now the strange thing is that if I use F5 to Debug then it runs perfectly with the development environment.
Upvotes: 21
Views: 74555
Reputation: 11
open Powershell , reach to the project location
First Set environment Variable using the command
$Env:ASPNETCORE_ENVIRONMENT = "Qa"
Run application from power shell dotnet run --no-launch-profile
Upvotes: 1
Reputation: 9332
For .NET Core 3.1, it happens that you need to add:
.AddCommandLine(args)
to your ConfigurationBuilder in Program.cs
for
dotnet run --environment "Development"
to work (switch ASP.NET Core environments).
Upvotes: 2
Reputation: 6095
Finally I have done it...
Let’s look at how I achieved this.
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"Development": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Azuredev": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Azuredev"
}
}
}
}
{
"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": "${workspaceRoot}/my.api/bin/Debug/netcoreapp2.0/my.api.dll",
"args": [],
"cwd": "${workspaceRoot}/my.api",
"stopAtEntry": false,
"requireExactSource": 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"
}
},
"sourceFileMap": {
"/Views": "${workspaceRoot}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
public IConfigurationRoot Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
this.HostingEnvironment = env;
}
After this all changes, my API is working fine with both the F5 debug option as well as CLI terminal.
To launch the application from the command line, use these keywords:
dotnet run --launch-profile "Development"
OR
dotnet run --launch-profile "Azuredev"
Upvotes: 7
Reputation: 10320
You can update your launchsettings.json to include a 'Development' profile and then run:
dotnet run --launch-profile "Development"
For further details on configuration of the launchSettings.json file see Working with multiple environments
Note that the commandName would probably need to be "Project" (I haven't really tried this much). Example launchSettings.json as follows:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:19882/",
"sslPort": 0
}
},
"profiles": {
"Development": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Upvotes: 18
Reputation: 9518
dotnet run --environment
makes no effect on ASPNETCORE_ENVIRONMENT
environment variable, see this issue.
Here's a detailed instruction on how to switch environments in a multiple ways: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments
For example, you can run it from a Command line (before dotnet run
): set ASPNETCORE_ENVIRONMENT=Development
Upvotes: 2