dotnet run 또는 dotnet watch with development environment from command line?
dotnet watch
asp.net 핵심 프로젝트를 실행 하는 명령을 사용 하고 있습니다. 그러나 기본적으로 Production
환경으로 선택 합니다.
다음을 사용하여 두 가지 옵션을 모두 시도했습니다.
1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development
2) > dotnet run ASPNETCORE_ENVIRONMENT=Development
그러나 여전히 생산을 환경으로 선택합니다.
참고 : Visual Studio에서 환경 변수는 기본적으로 프로젝트 속성에서 개발로 설정되며 Visual Studio에서 실행하면 해당 변수가 선택됩니다.
질문은 다음 중 하나를 사용하여 명령 줄에서 개발중인 dotnet 핵심 프로젝트를 실행하는 방법은 무엇입니까? :
1) dotnet run
2) dotnet watch
ASPNETCORE_ENVIRONMENT
dotnet
CLI 로의 전환이 아닌 환경 변수 (및 AFAIK) 입니다.
따라서 도구를 사용 하기 전에 설정해야 합니다.
rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...
rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
당신은하지 않습니다 이 당신이 어떻게 조정하면 환경 변수를 사용하여 WebHostBuilder
구성을 처리합니다. 이것은 단지의 기본값입니다 dotnet new -t web
. 예를 들어, 기본 환경을 프로덕션 대신 "development"로 설정 하고 명령 줄에서 환경 재정의를 용이하게하려면 다음에서 일반 Program.cs
코드를 수정하여 수행 할 수 있습니다 .
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
... 이렇게 ...
private static readonly Dictionary<string, string> defaults =
new Dictionary<string, string> {
{ WebHostDefaults.EnvironmentKey, "development" }
};
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddInMemoryCollection(defaults)
.AddEnvironmentVariables("ASPNETCORE_")
.AddCommandLine(args)
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
이렇게하면 환경 변수는 계속 작동하지만 다음과 같이 타사 종속성없이 명령 줄에서 재정의 할 수 있습니다.
dotnet run environment=development
dotnet run environment=staging
이것은 실제로 여만 발전기가하는 일 입니다.
다음을 호출 할 때 변수를 인라인으로 설정할 수도 있습니다 dotnet
.
ASPNETCORE_ENVIRONMENT=Development dotnet run
I have found this is great for NPM scripts, but must always be called right before dotnet
, e.g.:
{
...
"scripts": {
"start": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet run",
"watch": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet watch"
},
}
Note: This only works in OS X or Linux; for a cross-platform solution, you can use cross-env
:
npm install cross-env -D
Then change the scripts to:
{
...
"scripts": {
"start": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet run",
"watch": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet watch"
},
}
Styling added.
If you’re using PowerShell in Windows, execute
$Env:ASPNETCORE_ENVIRONMENT = "Development"
If you’re using cmd.exe in Windows, execute
setx ASPNETCORE_ENVIRONMENT "Development"
, and then restart your command prompt to make the change take effectIf you’re using Mac/Linux, execute
export ASPNETCORE_ENVIRONMENT=Development
Check documentation
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-run?tabs=netcore21
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.1
dotnet run --launch-profile EnvironmentsSample
launchSettings.json
{
"profiles": {
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:54340/"
},
}
}
With credit to @Technetium 's answer, here's an update to dotnetcore 2.0 that works really well for me:
public class Program
{
private static readonly Dictionary<string, string> defaults = new Dictionary<string, string> {{ WebHostDefaults.EnvironmentKey, "Development" } };
private static IConfiguration config;
public static void Main(string[] args)
{
config = new ConfigurationBuilder()
.AddInMemoryCollection(defaults)
.AddEnvironmentVariables("ASPNETCORE_")
.AddCommandLine(args)
.Build();
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
/* Following setting already accounted for in CreateDefaultBuilder() : https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.webhost.createdefaultbuilder?view=aspnetcore-2.0 */
// .UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
}
Thanks again, @Technetium
'program tip' 카테고리의 다른 글
각 그룹 내에서 지연 변수를 만드는 방법은 무엇입니까? (0) | 2020.12.14 |
---|---|
ADB를 통해 연결된 기기의 Android OS 버전 가져 오기 (0) | 2020.12.14 |
PHP에서 현재 함수의 이름 검색 (0) | 2020.12.14 |
const int = int const? (0) | 2020.12.14 |
Spring 구성 파일로 시스템 속성 설정 (0) | 2020.12.14 |