web-dev-qa-db-fra.com

Comment définir aspnetcore_environment dans le fichier de publication?

J'ai une application principale ASP.NET (Web Api). La documentation a expliqué fonctionne avec plusieurs environnements , mais n'a pas expliqué comment définir aspnetcore_environment lors de la publication du site Web. 

Disons donc que si j'ai 3 environnements Development, Staging et Production 

  1. Dans l'application Web ASP.NET classique, j'avais l'habitude de créer 3 configurations de construction. Development, Staging et Production (comme dans l'image ci-dessous). puis 3 fichiers .pubxml, un pour chaque configuration. Dois-je utiliser la même approche pour l'application ASP.NET Core également?

  2. Comment définir aspnetcore_environment dans le fichier .pubxml

  3. Si l'approche spécifiée à la question 1 est obsolète, quelle est l'approche alternative? (J'utilise Jenkins pour CI)

 enter image description here

Mise à jour 1

Je comprends que je dois définir ASPNETCORE_ENVIRONMENT mais je ne suis pas en mesure de comprendre où nous plaçons cela. Pendant le développement, je peux définir cela dans le profil dans launchSettings.json. Cependant, la question était de savoir comment définir cela lors de la publication en mode de stockage intermédiaire ou en production. définissons-nous la variable d'environnement sur le serveur cible lui-même? 

 enter image description here

Mise à jour 2
J'ai trouvé un article ici qui explique différentes manières de définir une variable d'environnement. Cela répondait partiellement à ma question. Cependant, lorsque je publie l'application, le processus de publication n'honore pas la variable d'environnement lors de la publication appsettings.{env.EnvironmentName}.json
J'ai créé séparément post pour cette question

18
LP13

Lorsque vous hébergez l'application sous IIS, vous pouvez définir la variable d'environnement dans web.config.

https://docs.Microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

Pour le générer lors de la publication, ajoutez un fichier web.config à la racine de votre projet. "Dotnet publish" utilisera ce fichier comme base pour celui généré dans le dossier de publication. Ensuite, vous pouvez modifier la valeur de votre système de déploiement.

<?xml version="1.0" encoding="utf-8" ?>
<!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS -->
<configuration>
 <system.webServer>
   <aspNetCore stdoutLogEnabled="true">
     <environmentVariables>
       <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
     </environmentVariables>
   </aspNetCore>
 </system.webServer>  
</configuration>
14

Vous pouvez transmettre l'ASPNETCORE_ENVIRONMENT souhaité à la commande de publication dotnet en tant qu'argument à l'aide de: 

/p:EnvironmentName=Staging

par exemple. dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

Cela générera le fichier web.config avec l’environnement correct spécifié pour votre projet:

    <environmentVariables>
      <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
    </environmentVariables>
9
Sheldon Nunes

Pour configurer deux profils ou plus, vous devez créer un profil supplémentaire, sous la forme mentionné dans un article lié , et votre launchSettings.json contiendra un tableau:

"profiles": {
  "IIS Express": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "IIS Express (Staging)": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Staging"
    }
  }
}

Pour pouvoir lire la variable d'environnement, vous devez le spécifier au démarrage } _ et appeler la méthode supplémentaire AddEnvironmentVariables aux variables:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            // general properties
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            // specify the environment-based properties
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            // do not forget to add environment variables to your config!
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
}
1
VMAtm

J'avais les mêmes exigences et j'ai proposé les solutions suivantes. Cela fonctionne bien avec les déploiements automatisés et nécessite moins de changements de configuration.

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>'$(Configuration)'</EnvironmentName>
  </PropertyGroup>

Le code ci-dessus ajouterait le nom de l’environnement sous la forme Development pour une configuration vide ou Debug. Pour toute autre configuration, le nom de l'environnement serait choisi dans la configuration sélectionnée. Cela ajoutera l'environnement ASPNETCORE_ENVIRONMENT avec la configuration souhaitée. Vous pouvez modifier la logique du nom de l'environnement à votre guise en mettant à jour le fichier CsProj. 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é au Properties/PublishProfiles/{profilename.pubxml}. Le nom de l’environnement sera défini dans web.config lors de la publication du projet. Plus de détails ici

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

 enter image description here

Comme indiqué dans l'image ci-dessus, l'environnement peut être ajouté pour chaque configuration et le nom de la propriété EnvironmentName peut être modifié dans chaque fichier * .pubxml.

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 Development dans le fichier web.config.

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

1
Abhinav Galodha

Un moyen simple de le configurer dans Visual Studio IDE.

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

 enter image description here

N'utilisez pas de variables d'environnement de niveau machine à la place de scope à l'application, il est possible qu'une autre application fasse De même, le changement peut affecter d'autres applications.

0
Mark Macneil Bikeio

Je pense que vous ne pouvez pas le faire dans le profil de publication. Vous devez définir une variable d'environnement, par exemple ASPNETCORE_ENVIRONMENT = Staging . Je devais faire la même chose avec une application Web principale Aspnet sur Azure. Je voulais avoir le développement, la mise en scène et la production. La façon dont je l'ai fait était exactement avec la variable env.

0
regnauld