web-dev-qa-db-fra.com

Comment définir ASPNETCORE_ENVIRONMENT pour qu'il soit pris en compte pour la publication d'une application principale asp.net?

lorsque je publie mon application Web principale asp.net sur mon système de fichiers local, il prend toujours la production-config et la variable ASPNETCORE_ENVIRONMENT avec la valeur = "Production".

comment et où dois-je définir la valeur de la variable ASPNETCORE_ENVIRONMENT afin qu'elle soit prise en compte non seulement pour le débogage, mais également pour la publication? J'ai déjà essayé les options suivantes sans succès:

  • dans les paramètres de Windows
  • dans un fichier .pubxml
  • dans launchSettings.json
  • dans project.json
66
Dario

Option1:

Pour définir la variable d’environnement ASPNETCORE_ENVIRONMENT dans Windows,

Ligne de commande - setx ASPNETCORE_ENVIRONMENT "Development"

PowerShell - $Env:ASPNETCORE_ENVIRONMENT = "Development"

Pour les autres systèmes d’exploitation, reportez-vous à ceci - https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/environments

Option 2:

Si vous voulez définir ASPNETCORE_ENVIRONMENT en utilisant web.config, puis ajoutez aspNetCore comme ceci-

<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.Microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>
43
Sanket

Outre les options mentionnées ci-dessus, il existe deux autres solutions.

1. Modification du fichier de projet (.CsProj) fichier

MSBuild prend en charge la propriété EnvironmentName qui peut vous aider à définir la bonne variable d'environnement en fonction de l'environnement que vous souhaitez déployer. Le nom de l'environnement serait ajouté dans le fichier web.config lors de la phase de publication.

Ouvrez simplement le fichier de projet (* .csProj) et ajoutez le code XML suivant.

<!-- Custom Property Group added to add the Environment name during publish
  The EnvironmentName property is used during the publish for the Environment variable in web.config
  -->
  <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
    <EnvironmentName>Development</EnvironmentName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
    <EnvironmentName>Production</EnvironmentName>
  </PropertyGroup>

Le code ci-dessus ajouterait le nom de l'environnement sous la forme Development pour la configuration de débogage ou si aucune configuration n'est spécifiée. Pour toute autre configuration, le nom de l'environnement serait Production dans le fichier web.config généré. Plus de détails ici

2. Ajout de la propriété EnvironmentName dans les profils de publication.

Nous pouvons également ajouter la propriété <EnvironmentName> dans le profil de publication. Ouvrez le fichier de profil de publication situé à l'emplacement Properties/PublishProfiles/{profilename.pubxml}. Cela définira le nom de l'environnement dans web.config lors de la publication du projet. Plus de détails ici

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

3. Options de ligne de commande utilisant dotnet publish

De plus, nous pouvons transmettre la propriété EnvironmentName en tant qu'option de ligne de commande à la commande dotnet publish. La commande suivante inclurait la variable d’environnement sous la forme Development dans le fichier web.config.

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development

34
Abhinav Galodha

Moyen simple de le définir dans Visual Studio IDE.

Projet> Propriétés> Débogage> Variables d'environnement

enter image description here

20
Mark Macneil Bikeio

Vous devez suivre le instructions fournies dans la documentation , en utilisant le web.config.

<aspNetCore processPath="dotnet"
        arguments=".\MyApp.dll"
        stdoutLogEnabled="false"
        stdoutLogFile="\\?\%home%\LogFiles\aspnetcore-stdout">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

Notez que vous pouvez également définir d'autres variables d'environnement.

ASP.NET Core Module vous permet de spécifier des variables d'environnement pour le processus spécifié dans l'attribut processPath en les spécifiant dans un ou plusieurs éléments enfants EnvironmentVariable d'un élément de collection environmentVariables sous l'élément aspNetCore. Les variables d'environnement définies dans cette section ont priorité sur les variables d'environnement système du processus.

14
David Pine

Avec la dernière version de dotnet cli (2.1.400 ou supérieure), vous pouvez simplement définir cette propriété msbuild $(EnvironmentName) et l’outil de publication se chargera d’ajouter ASPNETCORE_ENVIRONMENT au fichier web.config avec le nom de l’environnement.

De plus, le support XDT est disponible à partir de 2.2.100-preview1.

Exemple: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md

5
vijayrkn

Voici comment nous pouvons définir au moment de l'exécution:

public class Program
{
    public static void Main(string[] args)
    {
        Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}
0
Mightywill