dotnet run или dotnet watch со средой разработки из командной строки?

Я использую dotnet watch команда для запуска asp.net основной проект. Однако по умолчанию он собирает Production как окружающая среда.

Я пробовал оба варианта, используя:

1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development

2) > dotnet run ASPNETCORE_ENVIRONMENT=Development

но он по-прежнему поднимает производство как среду.

Примечание: в среде visual studio переменная задается в свойствах проекта как разработка по умолчанию, и запуск из visual studio выбирает эту переменную.

вопрос: Как запустить проект dotnet core в разработке из командной строки используя либо?:

1) dotnet run
2) dotnet watch

5 ответов


ASPNETCORE_ENVIRONMENT является переменной окружения (и AFAIK), а не переключателем на dotnet cli.

Итак, что бы вы сделали, это установить его до для использования инструмента:

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

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

не есть использовать переменные среды, если вы отрегулируете, как 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

именно это генераторы писаря делать.


вы также можете установить переменную inline при вызове 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"
  },
}

источник: https://blogs.msdn.microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core-with-javascriptservices/

стилизация добавил.

Если вы используете PowerShell в Windows, выполните $Env:ASPNETCORE_ENVIRONMENT = "Development"

Если вы используете cmd.exe в Windows, выполните setx ASPNETCORE_ENVIRONMENT "Development", а потом перезагрузка командная строка чтобы изменения вступили в силу

Если вы используете Mac / Linux выполнить export ASPNETCORE_ENVIRONMENT=Development


с кредитом на ответ @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