program tip

dotnet run 또는 dotnet watch with development environment from command line?

radiobox 2020. 12. 14. 08:02
반응형

dotnet run 또는 dotnet watch with development environment from command line?


dotnet watchasp.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_ENVIRONMENTdotnetCLI 로의 전환이 아닌 환경 변수 (및 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"
  },
}

Source: https://blogs.msdn.microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core-with-javascriptservices/

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 effect

If 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

참고URL : https://stackoverflow.com/questions/37322565/dotnet-run-or-dotnet-watch-with-development-environment-from-command-line

반응형