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)です。
だからあなたがすることはそれを設定することですpriorツールを使用する:
rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...
rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
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
これは、実際には ヨーマンジェネレーターが行う です。
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"
},
}
スタイリングが追加されました。
WindowsでPowerShellを使用している場合は、
$Env:ASPNETCORE_ENVIRONMENT = "Development"
を実行しますWindowsでcmd.exeを使用している場合は、
setx ASPNETCORE_ENVIRONMENT "Development"
を実行してからコマンドプロンプトを再起動に変更を有効にするMac/Linuxを使用している場合は、
export ASPNETCORE_ENVIRONMENT=Development
を実行します
ドキュメントを確認する
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/"
},
}
}
@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