从命令行使用开发环境运行或观察网络?

我使用 dotnet watch命令来运行 asp.net 核心项目。但是,默认情况下,它将 Production作为一个环境来拾取。

我尝试了以下两种方法:

1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development


2) > dotnet run ASPNETCORE_ENVIRONMENT=Development

但它仍然把生产作为一种环境。

注意: 在视觉工作室中,环境变量默认设置为“开发”,并从视觉工作室中选择该变量运行。

问题是: 如何从命令行运行开发中的 dotnet 核心项目使用? :

1) dotnet run
2) dotnet watch
74396 次浏览

ASPNETCORE_ENVIRONMENT是一个环境变量(和 AFAIK) ,而不是一个转换到 dotnet cli。

所以你要做的就是把 副院长设置成使用这个工具:

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


rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...

还可以在调用 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"
},
}

如果调整 WebHostBuilder处理其配置的方式,则 不会使用环境变量。这仅仅是 dotnet new -t web的默认值。例如,如果您希望能够将默认环境设置为“开发”而不是生产并方便在命令行中重写环境,那么您可以通过修改来自这个..。

    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

这就是 自耕农发电机

来自 用 JavaScriptServices 在 ASP.NET 内核上构建单页应用程序(添加样式) :

如果在 Windows 中使用 PowerShell,请执行 $Env:ASPNETCORE_ENVIRONMENT = "Development"

如果在 Windows 中使用 Cmd.exe,则执行 setx ASPNETCORE_ENVIRONMENT "Development",然后执行 重新启动命令提示符以使更改生效

如果使用 Mac/Linux,则执行 export ASPNETCORE_ENVIRONMENT=Development

值得赞扬的是@Techneium 的回答,下面是我对 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://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.webhost.createdefaultbuilder?view=aspnetcore-2.0 */
// .UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
}

再次感谢,@锝

检查文件

Https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-run?tabs=netcore21

Https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.1

dotnet run --launch-profile EnvironmentsSample

启动设置 json

{
"profiles": {
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:54340/"
},
}
}

使用 dotnet run 或 dotnet watch 从 CLI 设置:

dotnet run --environment Development

dotnet watch run --environment Development