dotnet运行OR dotnet手表与命令行的开发环境?

时间:2016-05-19 11:59:13

标签: asp.net-core .net-core dotnet-cli .net-core-rc2

我正在使用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}}

6 个答案:

答案 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)

来源: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

答案 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