Publier sur IIS, définition de la variable d'environnement

134

En lisant ces deux questions / réponses, j'ai pu exécuter une application Asp.net 5 sur le serveur IIS 8.5.

Asp.net vNext early beta publier sur IIS dans Windows Server

Comment configurer une application MVC6 pour qu'elle fonctionne sur IIS?

Le problème est que l'application Web utilise toujours env.EnvironmentNameavec valeur Developmentmême lorsqu'elle est exécutée sur IIS.

De plus, je souhaite exécuter deux versions du même site Web (Staging, Production) sur le même serveur, j'ai donc besoin d'une méthode pour définir la variable pour chaque site Web séparément.

Comment faire cela?

drpdrp
la source
4
On a généralement trois environnements de réseau Développement, Staging et Production. Le serveur Web est dans l'un des environnements. Ainsi, la définition de la variable d'environnement système pour le serveur n'est généralement pas une restriction réelle. On peut toujours l'utiliser Properties\launchSettings.jsonpour simuler un autre environnement de débogage dans Visual Studio.
Oleg

Réponses:

286

Cette réponse a été écrite à l'origine pour ASP.NET Core RC1. Dans RC2, ASP.NET Core est passé du gestionnaire httpPlafrom générique à celui spécifique à aspnetCore. Notez que l'étape 3 dépend de la version d'ASP.NET Core que vous utilisez.

Il s'avère que les variables d'environnement pour les projets ASP.NET Core peuvent être définies sans avoir à définir de variables d'environnement pour l'utilisateur ni à créer plusieurs entrées de commandes.

  1. Accédez à votre application dans IIS et choisissez Configuration Editor.
  2. Sélectionner Configuration Editor
  3. Choisissez system.webServer/aspNetCore(RC2 et RTM) ou system.webServer/httpPlatform(RC1) dans la zone de Sectionliste déroulante
  4. Choisissez Applicationhost.config ...dans la Fromliste déroulante.
  5. Faites un clic droit sur l' enviromentVariablesélément, sélectionnez 'environmentVariables' element, puis Edit Items. entrez la description de l'image ici
  6. Définissez vos variables d'environnement.
  7. Fermez la fenêtre et cliquez sur Appliquer.
  8. Terminé

De cette façon, vous n'avez pas à créer d'utilisateurs spéciaux pour votre pool ou à créer des entrées de commandes supplémentaires dans project.json. De plus, l'ajout de commandes spéciales pour chaque environnement interrompt "construire une fois, déployer plusieurs fois" car vous devrez appeler dnu publishséparément pour chaque environnement, au lieu de publier une fois et de déployer l'artefact résultant plusieurs fois.

Mis à jour pour RC2 et RTM, grâce à Mark G et tredder.

NickAb
la source
12
Pour l'étape 3, j'ai utilisé à la system.webServer/aspNetCoreplace.
Mark G
1
Les variables d'environnement système sont héritées par les processus au démarrage. Donc, si vous modifiez une variable d'environnement pendant l'exécution de votre application, vous ne pourrez pas voir ces modifications par défaut. Pour que les changements de var d'environnement système prennent effet, vous devrez au moins redémarrer le site, peut-être le pool, ou même le service IIS, selon la façon dont IIS crée des processus. Cela doit être testé.
NickAb
7
Les paramètres ajoutés via l'éditeur de configuration ne seront-ils pas effacés lors du prochain déploiement?
Brad Gardner
11
@ brad-gardner si des modifications sont apportées à Applicationhost.config au lieu de web.config, les modifications seront conservées entre les déploiements.
NickAb
15
Fonctionne pour Asp.Net Core 2.0
Frank Cannon
34

Mettez à jour web.config avec une section <environmentVariables> sous <aspNetCore>

<configuration>
  <system.webServer>
    <aspNetCore .....>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

Ou pour éviter de perdre ce paramètre lors de l'écrasement de web.config, apportez des modifications similaires à applicationHost.config en spécifiant l'emplacement du site comme le suggère @NickAb.

<location path="staging.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
<location path="production.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
Trevor Daniels
la source
2
Ceci est différent dans la mesure où votre web.config fait partie du projet et est versionné dans VCS. Si vous avez plusieurs environnements, tels que prod, staging, dev, vous aurez besoin d'un moyen de transformer web.config pour chacun d'eux. La modification de ApplicationHost.config dans IIS affecte uniquement cet IIS. Pour que vous puissiez avoir un seul web.config dans votre VCS et des variables d'environnement spécifiques à IIS qui remplacent les variables web.config. ApplicationHost.config peut être édité par programme à l'aide de PowerShell iis.net/learn/manage/powershell
...
Merci @NickAb, cela évite d'avoir à mettre à jour web.config à chaque déploiement. J'ai mis à jour ma réponse.
Trevor Daniels
J'ai du mal à faire cela à partir de PowerShell Je continue à obtenir Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... Normalement, pour définir une variable, j'écrirais quelque chose comme ceci: Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging qu'est- ce que je manque?
Christian
Je suis retourné à ce que je savais et j'ai utilisé à la appcmdplace.
Christian
@Christian, consultez cette réponse: stackoverflow.com/a/50869935/33533 Le nom et la valeur de la variable d'environnement vont dans une table de hachage, donc de votre exemple ce seraitSet-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
Curtis achète le
21

Edit: à partir des versions RC2 et RTM, ce conseil est obsolète. Le meilleur moyen que j'ai trouvé pour y parvenir dans la version est de modifier les sections web.config suivantes dans IIS pour chaque environnement:

system.webServer/aspNetCore:

Modifiez l'entrée environmentVariable et ajoutez un paramètre de variable d'environnement:

ASPNETCORE_ENVIRONMENT : < Your environment name >


Comme alternative à l'approche de drpdrp, vous pouvez faire ce qui suit:

  • Dans votre project.json, ajoutez des commandes qui transmettent la variable ASPNET_ENV directement à Kestrel:

    "commands": {
        "Development": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Development",
        "Staging": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Staging",
        "Production": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Production"
    }
    
  • Lors de la publication, utilisez l' --iis-commandoption pour spécifier un environnement:

    dnu publish --configuration Debug --iis-command Staging --out "outputdir" --runtime dnx-clr-win-x86-1.0.0-rc1-update1
    

J'ai trouvé cette approche moins intrusive que la création d'utilisateurs IIS supplémentaires.

Joshua Barron
la source
11
Si vous publiez via msdeploy de Visual Studio. Ensuite, vous pouvez mettre <IISCommand> Staging </IISCommand> dans votre fichier .pubxml et il se déploiera à l'aide de la commande IIS spécifiée même si vous ne pouvez pas le spécifier dans l'interface utilisateur de publication.
Dean North
@DeanNorth - C'est en or !! Fonctionne comme un champion! Merci d'avoir partagé!
S. Rasmussen
17

J'ai mes applications Web (PRODUCTION, STAGING, TEST) hébergées sur le serveur Web IIS. Il n'était donc pas possible de s'appuyer sur la variable d'environnement système de l'agent ASPNETCORE_ENVIRONMENT, car sa définition sur une valeur spécifique (par exemple STAGING) a un effet sur d'autres applications.

Pour contourner le problème, j'ai défini un fichier personnalisé (envsettings.json) dans ma solution visualstudio:

entrez la description de l'image ici

avec le contenu suivant:

{
  // Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
  // - Production
  // - Staging
  // - Test
  // - Development
  "ASPNETCORE_ENVIRONMENT": ""
}

Ensuite, en fonction de mon type d'application (Production, Staging ou Test), j'ai défini ce fichier en conséquence: en supposant que je déploie une application TEST, j'aurai:

"ASPNETCORE_ENVIRONMENT": "Test"

Après cela, dans le fichier Program.cs, récupérez simplement cette valeur, puis définissez l'environnement de webHostBuilder:

    public class Program
    {
        public static void Main(string[] args)
        {
            var currentDirectoryPath = Directory.GetCurrentDirectory();
            var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
            var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
            var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

            var webHostBuilder = new WebHostBuilder()
                .UseKestrel()
                .CaptureStartupErrors(true)
                .UseSetting("detailedErrors", "true")
                .UseContentRoot(currentDirectoryPath)
                .UseIISIntegration()
                .UseStartup<Startup>();

            // If none is set it use Operative System hosting enviroment
            if (!string.IsNullOrWhiteSpace(enviromentValue)) 
            { 
                webHostBuilder.UseEnvironment(enviromentValue);
            }

            var host = webHostBuilder.Build();

            host.Run();
        }
    }

N'oubliez pas d'inclure le envsettings.json dans les publishOptions (project.json):

  "publishOptions":
  {
    "include":
    [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "envsettings.json",
      "appsettings.json",
      "appsettings*.json",
      "web.config"
    ]
  },

Cette solution me rend libre d'avoir une application ASP.NET CORE hébergée sur le même IIS, indépendamment de la valeur de la variable d'environnement.

Christian Del Bianco
la source
Très bien, le seul changement que je suggère est swap var currentDirectoryPath = Directory.GetCurrentDirectory (); pour var currentDirectoryPath = PlatformServices.Default.Application.ApplicationBasePath; C'est un moyen beaucoup plus sûr d'obtenir le répertoire actuel.
Peter Kottas
7
Quelle belle expérience hors de la boîte, quand vous devez créer une autre couche de configurations pour gérer les configurations d'un framework
Kugel
16

Après une recherche approfondie sur Google, j'ai trouvé une solution de travail, qui se compose de deux étapes.

La première étape consiste à définir la variable d'environnement à l'échelle du système ASPNET_ENV sur Production et à redémarrer Windows Server . Après cela, toutes les applications Web reçoivent la valeur «Production» en tant que EnvironmentName.

La deuxième étape (pour activer la valeur `` Staging '' pour la mise en scène Web) était un peu plus difficile à faire fonctionner correctement, mais la voici:

  1. Créez un nouvel utilisateur Windows, par exemple StagingPool sur le serveur.
  2. Pour cet utilisateur, créez une nouvelle variable utilisateur ASPNETCORE_ENVIRONMENT avec la valeur 'Staging' (vous pouvez le faire en vous connectant en tant que cet utilisateur ou via regedit)
  3. De retour en tant qu'administrateur dans le gestionnaire IIS, recherchez le pool d'applications sous lequel le site Web de transfert est en cours d'exécution et, dans les paramètres avancés, définissez l'identité sur l'utilisateur StagingPool .
  4. Définissez également Load User Profile sur true pour que les variables d'environnement soient chargées. <- très important!
  5. Assurez-vous que StagingPool dispose des droits d'accès au dossier Web et arrêtez et démarrez le pool d'applications.

Désormais, le site Web de Staging doit avoir le EnvironmentName défini sur «Staging».

Mise à jour: dans Windows 7+, il existe une commande qui peut définir des variables d'environnement à partir de l'invite CMD également pour un utilisateur spécifié. Cela génère l'aide et des exemples:

>setx /?
drpdrp
la source
1
Il semble que dans ASP.NET 5 RC1, la variable d'environnement a été modifiée en Hébergement: Environnement.
Grady Werner
Comment définir «Load User Profile» sur true lorsque nous déployons ceci sur Azure Web App?
Puneet Ghanshani
@PunitGanshani Si je comprends bien, il existe une section "Paramètres de l'application" dans le portail azure pour l'application Web où vous pouvez définir des paires clé / valeur d'environnement: azure.microsoft.com/en-us/documentation/articles
...
@GradyWerner Pour RC2, ils le changent (à partir de maintenant) en ASPNET_ENVIRONMENT ;-)
b.pell
1
@ b.pell Il semble que c'est maintenant ASPNETCORE_ENVIRONMENT :)
Mark G
11

Vous pouvez également passer la commande souhaitée ASPNETCORE_ENVIRONMENTdans la commande dotnet publish en tant qu'argument en utilisant:

/p:EnvironmentName=Staging

par exemple:

dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

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

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

Outre les options mentionnées ci-dessus, il existe quelques autres solutions qui fonctionnent bien avec les déploiements automatisés ou nécessitent moins de changements de configuration.

1. Modification du fichier de projet (.CsProj)

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

Ouvrez simplement le fichier de projet (* .csProj) et ajoutez le 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 comme Developmentpour la configuration de débogage ou si aucune configuration n'est spécifiée. Pour toute autre configuration, le nom de l'environnement se trouverait Productiondans 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 <EnvironmentName>propriété dans le profil de publication. Ouvrez le fichier de profil de publication qui se trouve dans le Properties/PublishProfiles/{profilename.pubxml}champ 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é en EnvironmentNametant qu'option de ligne de commande à la dotnet publishcommande. La commande suivante inclurait la variable d'environnement comme Developmentdans le fichier web.config.

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

Abhinav Galodha
la source
7

Pour prolonger la réponse de @ tredder, vous pouvez modifier les variables d'environnement en utilisant appcmd

Mise en scène

%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST

Production

%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST

Christian
la source
Voici comment accomplir la même chose avec Powershell sur un serveur de build sans IIS installé. gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
Mark Arnott
La spécification de "staging.example.com" ou "example.com" appliquera uniquement la variable à ces sites Web spécifiques. Omettre cela créera une variable globale pour tous les sites Web sur le serveur.
deadlydog
6

Ce que vous devez savoir en un seul endroit:

  • Pour que les variables d'environnement remplacent les paramètres de configuration, elles doivent être précédées du préfixe ASPNETCORE_.
  • Si vous souhaitez faire correspondre les nœuds enfants dans votre configuration JSON, utilisez-les :comme séparateur. Si la plateforme n'autorise pas les deux points dans les clés de variable d'environnement, utilisez à la __place.
  • Vous voulez que vos paramètres se terminent ApplicationHost.config. L'utilisation de l'éditeur de configuration IIS entraînera l'écriture de vos entrées dans l'application Web.config- et sera écrasée lors du prochain déploiement!
  • Pour la modification ApplicationHost.config, vous souhaitez utiliser appcmd.exepour vous assurer que vos modifications sont cohérentes. Exemple:%systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_AWS:Region',value='eu-central-1']" /commit:site

  • Les caractères qui ne sont pas sécurisés pour les URL peuvent être échappés au format Unicode, comme %u007bpour le crochet gauche.

  • Pour répertorier vos paramètres actuels (combinés aux valeurs de Web.config): %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • Si vous exécutez la commande pour définir une clé de configuration plusieurs fois pour la même clé, elle sera ajoutée plusieurs fois! Pour supprimer une valeur existante, utilisez quelque chose comme %systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /-"environmentVariables.[name='ASPNETCORE_MyKey',value='value-to-be-removed']" /commit:site.
realMarkusSchmidt
la source
1
notez qu'avec /commit:siteles changements sont écrits dans le web.config, afin de les enregistrer dans ApplicationHost.configcelui qui devrait utiliser/commit:apphost
Angel Yordanov
-section:system.webServer/aspNetCore /-"environmentVariables.(avec moins pour supprimer la variable d'environnement) ne peut pas être exécuté pendant le pipeline de version Azure. L'erreur est hresult:80070032, message:Command execution failed. Cependant clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:sitefonctionne très bien. Cela efface toute la section aspNetCore du site Web mais ce n'est pas un problème car il est paramétré lors de la publication.
oleksa
6

Semblable à d'autres réponses, je voulais m'assurer que mon paramètre d'environnement ASP.NET Core 2.1 persistait dans les déploiements, mais qu'il s'appliquait également uniquement au site spécifique.

Selon la documentation de Microsoft, il est possible de définir la variable d'environnement sur le pool d'applications à l'aide de la commande PowerShell suivante dans IIS 10:

$appPoolName = "AppPool"
$envName = "Development"
cd "$env:SystemRoot\system32\inetsrv"
.\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$appPoolName'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='$envName']" /commit:apphost

Je dois malheureusement encore utiliser IIS 8.5 et je pensais que je n'avais pas de chance. Cependant, il est toujours possible d'exécuter un simple script PowerShell pour définir une valeur de variable d'environnement spécifique au site pour ASPNETCORE_ENVIRONMENT:

Import-Module -Name WebAdministration
$siteName = "Site"
$envName = "Development"
Set-WebConfigurationProperty -PSPath IIS:\ -Location $siteName -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = $envName }
dasch88
la source
5

La solution @tredder avec édition applicationHost.config est celle qui fonctionne si vous avez plusieurs applications différentes situées dans des répertoires virtuels sur IIS.

Mon cas est:

  • J'ai un projet API et un projet APP , sous le même domaine, placés dans différents répertoires virtuels
  • La page racine XXX ne semble pas propager la variable ASPNETCORE_ENVIRONMENT à ses enfants dans les répertoires virtuels et ...
  • ... Je ne peux pas définir les variables dans le répertoire virtuel comme @NickAb décrit (erreur obtenue La demande n'est pas prise en charge. (Exception de HRESULT: 0x80070032) lors de l'enregistrement des modifications dans l'éditeur de configuration):
  • Aller dans applicationHost.config et créer manuellement des nœuds comme ceci:

    <location path="XXX/app"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location> <location path="XXX/api"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location>

et le redémarrage de l'IIS a fait le travail.

Bartosz Lenar
la source
0

Pour obtenir les détails de l'erreur, j'ai dû ajouter ASPNETCORE_ENVIRONMENTune variable d'environnement pour le pool d'applications correspondant system.applicationHost/applicationPools .

Remarque: l'application Web dans mon cas était ASP.NET Core 2une application Web hébergée sur IIS 10. Cela peut être fait via Configuration Editorin IIS Manager(voir Modifier des collections avec l'éditeur de configuration pour savoir où trouver cet éditeur IIS Manager).

Dmitry Pavlov
la source
0

J'ai créé un référentiel pour publier IIS avec la configuration de l'environnement dans Web.config.

https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment

  • Installer
    • Récupérez les sections des fichiers .csproj et .user.csproj dans vos fichiers de projet.
    • Obtenez les fichiers MyAspNetEnvironment.props, web.development.config et web.production.config.
  • Configuration
    • Modifiez la valeur de la propriété ASPNETCORE_ENVIRONMENT dans user.csproj de manière appropriée.
sous-codeur
la source
Cela ne semble pas apporter une réponse de qualité à la question. Veuillez soit modifier votre réponse en ajoutant les détails généraux de cette solution, soit simplement la supprimer et la publier en tant que commentaire à la question. Merci!
sɐunıɔ ןɐ qɐp
0

J'ai modifié la réponse donnée à @Christian Del Bianco . J'ai changé le processus pour .net core 2 et supérieur en tant que fichier project.json maintenant absolu.

  1. Tout d'abord, créez le fichier appsettings.json dans le répertoire racine. avec le contenu

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. Créez ensuite deux autres fichiers de paramètres appsettings.Development.json et appsettings.Production.json avec la configuration nécessaire.

  3. Ajoutez le code nécessaire pour configurer l'environnement dans le fichier Program.cs .

    public class Program
    {
    public static void Main(string[] args)
    {
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    
      ***var currentDirectoryPath = Directory.GetCurrentDirectory();
        var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
        var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
        var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();***
    
        try
        {
            ***CreateWebHostBuilder(args, enviromentValue).Build().Run();***
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of setup related exception");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }
    
    public static IWebHostBuilder CreateWebHostBuilder(string[] args, string enviromentValue) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()
            ***.UseEnvironment(enviromentValue);***
    

    }

  4. Ajoutez le envsettings.json à votre fichier .csproj pour le copier dans le répertoire publié.

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. Maintenant, modifiez simplement ASPNETCORE_ENVIRONMENT comme vous le souhaitez dans le fichier envsettings.json et publiez- le.

Md. Nazrul Islam
la source