76

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

我已经尝试了这两种选择:

1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development

2) > dotnet run ASPNETCORE_ENVIRONMENT=Development

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

注意:在 Visual Studio 中,环境变量在项目属性中默认设置为 Development,从 Visual Studio 运行会选择该变量。

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

1) dotnet run
2) dotnet watch
4

6 回答 6

118

ASPNETCORE_ENVIRONMENT是一个环境变量(和 AFAIK)而不是切换到dotnetcli。

所以你要做的是在使用该工具之前设置它:

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

rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
于 2016-05-19T12:09:07.080 回答
35

如果您调整处理其配置的方式,不必使用环境变量。WebHostBuilder这只是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

这实际上是yeoman 生成器所做的

于 2016-08-24T19:51:35.803 回答
30

您还可以在调用时设置变量内联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"
  },
}
于 2016-06-27T19:05:31.343 回答
22

使用 JavaScriptServices 在 ASP.NET Core 上构建单页应用程序(添加样式):

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

如果您在 Windows 中使用cmd.exesetx ASPNETCORE_ENVIRONMENT "Development" ,请执行,然后重新启动命令提示符以使更改生效

如果您使用的是Mac/Linux,请执行export ASPNETCORE_ENVIRONMENT=Development

于 2017-05-16T04:50:53.440 回答
20

检查文档

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

启动设置.json

{ 
  "profiles": {    
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:54340/"
    },   
  }
}
于 2018-10-30T14:51:29.290 回答
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

于 2018-04-20T14:41:48.337 回答