我正在使用Production
命令来运行asp.net核心项目。但是,默认情况下,它会将1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development
2) > dotnet run ASPNETCORE_ENVIRONMENT=Development
作为环境。
我尝试了两种选择:
1) dotnet run
2) dotnet watch
但它仍然以生产环境为主。
注意:在visual studio中,环境变量在项目属性中设置为默认情况下的开发,并从visual studio中选择该变量。
问题是:如何使用?:
从命令行开发dotnet核心项目{{1}}
答案 0 :(得分:88)
ASPNETCORE_ENVIRONMENT
是一个环境变量(和AFAIK),而不是切换到dotnet
cli。
所以你要做的是将之前的设置为使用该工具:
rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...
rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
答案 1 :(得分:26)
如果您调整WebHostBuilder
处理其配置的方式,则 无法使用来使用环境变量。这仅仅是dotnet new -t web
的默认值。例如,如果您希望能够将默认环境设置为“development”instead of production并有助于在命令行中覆盖环境,则可以通过修改此常规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
这实际上是the yeoman generators do。
答案 2 :(得分:22)
您还可以在调用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"
},
}
答案 3 :(得分:11)
添加了样式。
如果您在Windows中使用 PowerShell ,请执行
$Env:ASPNETCORE_ENVIRONMENT = "Development"
如果您在Windows中使用 cmd.exe ,请执行
setx ASPNETCORE_ENVIRONMENT "Development"
,然后重新启动命令提示符以使更改生效如果您使用的是 Mac / Linux ,请执行
export ASPNETCORE_ENVIRONMENT=Development
答案 4 :(得分:2)
检查文档
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/"
},
}
}
答案 5 :(得分:1)
归功于@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