dotnet запустить ИЛИ dotnet смотреть из среды разработки из командной строки?
Я использую dotnet watch
команда для запуска основного проекта asp.net. Однако по умолчанию он собирает Production
как среда.
Я пробовал оба варианта, используя:
1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development
2) > dotnet run ASPNETCORE_ENVIRONMENT=Development
Но он все еще воспринимает производство как окружающую среду.
Примечание. В Visual Studio переменная среды задается в свойствах проекта, так как по умолчанию разработка и запуск из Visual Studio выбирает эту переменную.
Вопрос: Как запустить основной проект dotnet в разработке из командной строки, используя либо:
1) dotnet run
2) dotnet watch
7 ответов
ASPNETCORE_ENVIRONMENT
переменная окружения (и AFAIK), а не переключатель к dotnet
кли.
Итак, что вы должны сделать, это установить его перед использованием инструмента:
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://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/"
},
}
}
Стайлинг добавлен.
Если вы используете PowerShell в Windows, выполните
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Если вы используете cmd.exe в Windows, выполните
setx ASPNETCORE_ENVIRONMENT "Development"
, а затем перезапустите командную строку, чтобы изменения вступили в силуЕсли вы используете Mac / Linux, выполните
export ASPNETCORE_ENVIRONMENT=Development
Чтобы установить из CLI с помощью dotnet run или dotnet watch:
dotnet run --environment Development
dotnet watch run --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