web-dev-qa-db-ja.com

dotnet run OR 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
55
Nexus23

ASPNETCORE_ENVIRONMENTは、dotnet cliへの切り替えではなく、環境変数(およびAFAIK)です。

だからあなたがすることはそれを設定することですpriorツールを使用する:

rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...

rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
92
Christian.K

WebHostBuilderがその構成を処理する方法を調整する場合、環境変数を使用するhaveはありません。これはdotnet new -t webの単なるデフォルトです。たとえば、デフォルト環境を「開発」に設定できるようにしたい場合は、 プロダクションの代わりに を使用して、コマンドラインで環境をオーバーライドしやすくするために、通常の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

これは、実際には ヨーマンジェネレーターが行う です。

26
Technetium

dotnetを呼び出すときに、変数をインラインで設定することもできます。

ASPNETCORE_ENVIRONMENT=Development dotnet run

私はこれがNPMスクリプトにとって素晴らしいことを発見しましたが、dotnetの直前で常に呼び出されなければなりません、例えば:

{
  ...
  "scripts": {
    "start": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet run",
    "watch": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet watch"
  },
}

注:これはOS XまたはLinuxでのみ機能します。クロスプラットフォームソリューションの場合、cross-envを使用できます。

npm install cross-env -D

次に、スクリプトを次のように変更します。

{
  ...
  "scripts": {
    "start": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet run",
    "watch": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet watch"
  },
}
23
Geir Sagberg

ソース: https://blogs.msdn.Microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core-with-javascriptservices/

スタイリングが追加されました。

WindowsでPowerShellを使用している場合は、$Env:ASPNETCORE_ENVIRONMENT = "Development"を実行します

Windowsでcmd.exeを使用している場合は、setx ASPNETCORE_ENVIRONMENT "Development"を実行してからコマンドプロンプトを再起動に変更を有効にする

Mac/Linuxを使用している場合は、export ASPNETCORE_ENVIRONMENT=Developmentを実行します

13
emragins

ドキュメントを確認する

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/"
    },   
  }
}
3
RouR

@Technetiumの答えに感謝しますが、dotnetcore 2.0のアップデートは次のとおりです。

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();
    }

再びありがとう、@ Technetium

1
Bishop