Dotnet run или dotnet смотреть с средой разработки из командной строки?
Я использую команду dotnet watch
для запуска основного проекта asp.net. Однако по умолчанию он выбирает среду Production
.
Я попробовал оба варианта, используя:
1) dotnet watch ASPNETCORE_ENVIRONMENT=Development
2) dotnet run ASPNETCORE_ENVIRONMENT=Development
Но он по-прежнему воспринимает производство как среду.
Примечание. В переменной окружения визуальной студии задаются свойства проекта, так как разработка по умолчанию и запуск из visual studio выбирает эту переменную.
Вопрос: как запустить проект ядра dotnet в разработке из командной строки, используя либо?:
1) dotnet run
2) dotnet watch
Ответы
Ответ 1
ASPNETCORE_ENVIRONMENT
- это переменная среды (и AFAIK), а не переключатель в dotnet
cli.
Итак, что бы вы сделали, установите его перед использованием инструмента:
rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...
rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
Ответ 2
Вам не нужно использовать переменные среды, если вы отрегулируете, как 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
Это на самом деле то, что генераторы йоменов.
Ответ 3
Вы также можете установить переменную 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"
},
}
Ответ 4
Источник: 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