J'utilise dotnet watch
commande pour exécuter le projet principal asp.net. Cependant, par défaut, il récupère le Production
en tant qu’environnement.
J'ai essayé les deux options en utilisant:
1) > dotnet watch ASPNETCORE_ENVIRONMENT=Development
2) > dotnet run ASPNETCORE_ENVIRONMENT=Development
Cependant, la production reste un environnement.
Remarque: La variable d'environnement de Visual Studio est définie dans les propriétés du projet en tant que Développement par défaut et s'exécutant à partir de Visual Studio la sélectionne.
La question est: Comment faire pour exécuter le projet de base dotnet en développement à partir de la ligne de commande en utilisant soit ?:
1) dotnet run
2) dotnet watch
ASPNETCORE_ENVIRONMENT
est une variable d’environnement (et autant que je sache) et non un passage à la dotnet
cli.
Donc, ce que vous feriez est de le configurer avant pour utiliser l'outil:
rem Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development
C:\> dotnet ...
rem Unix
$ export ASPNETCORE_ENVIRONMENT=Development
$ dotnet ...
Vous n'avez pas pour utiliser les variables d'environnement si vous ajustez la façon dont le WebHostBuilder
traite sa configuration. Ceci est simplement la valeur par défaut pour dotnet new -t web
. Par exemple, si vous souhaitez pouvoir définir l'environnement par défaut sur "développement" au lieu de la production et faciliter le remplacement de l'environnement dans la ligne de commande, vous pouvez le faire en modifiant le Program.cs
code de cette ...
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();
}
... dans quelque chose comme ça ...
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();
}
En faisant cela, les variables d’environnement fonctionneraient toujours, mais vous pouvez les remplacer sur la ligne de commande sans aucune dépendance tierce, comme ceci:
dotnet run environment=development
dotnet run environment=staging
C'est en fait ce que les générateurs yeoman font .
Vous pouvez également définir la variable inline lorsque vous appelez dotnet
:
ASPNETCORE_ENVIRONMENT=Development dotnet run
J'ai trouvé que c'était très bien pour les scripts NPM, mais je dois toujours l'appeler juste avant dotnet
, par exemple:
{
...
"scripts": {
"start": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet run",
"watch": "cd MyApp && ASPNETCORE_ENVIRONMENT=Development dotnet watch"
},
}
Note: Cela ne fonctionne que sous OS X ou Linux; pour une solution multiplate-forme, vous pouvez utiliser cross-env
:
npm install cross-env -D
Puis changez les scripts en:
{
...
"scripts": {
"start": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet run",
"watch": "cd MyApp && cross-env ASPNETCORE_ENVIRONMENT=Development dotnet watch"
},
}
Style ajouté.
Si vous utilisez PowerShell sous Windows, exécutez
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Si vous utilisez cmd.exe sous Windows, exécutez
setx ASPNETCORE_ENVIRONMENT "Development"
, puis redémarrez votre invite de commande pour que les modifications prennent effetSi vous utilisez Mac/Linux , exécutez
export ASPNETCORE_ENVIRONMENT=Development
Vérifier la documentation
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/"
},
}
}
Grâce à la réponse de @Technetium, voici une mise à jour de dotnetcore 2.0 qui fonctionne très bien pour moi:
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();
}
Merci encore, @Technetium