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.EnvironmentName
avec valeur Development
mê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?
Properties\launchSettings.json
pour simuler un autre environnement de débogage dans Visual Studio.Réponses:
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.
Configuration Editor
.Configuration Editor
system.webServer/aspNetCore
(RC2 et RTM) ousystem.webServer/httpPlatform
(RC1) dans la zone deSection
liste déroulanteApplicationhost.config ...
dans laFrom
liste déroulante.enviromentVariables
élément, sélectionnez'environmentVariables' element
, puisEdit Items
.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 appelerdnu publish
sé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.
la source
system.webServer/aspNetCore
place.Mettez à jour web.config avec une section <environmentVariables> sous <aspNetCore>
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.
la source
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?appcmd
place.Set-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
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:
Lors de la publication, utilisez l'
--iis-command
option pour spécifier un environnement:J'ai trouvé cette approche moins intrusive que la création d'utilisateurs IIS supplémentaires.
la source
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:
avec le contenu suivant:
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:
Après cela, dans le fichier Program.cs, récupérez simplement cette valeur, puis définissez l'environnement de webHostBuilder:
N'oubliez pas d'inclure le envsettings.json dans les publishOptions (project.json):
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.
la source
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:
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:
la source
Vous pouvez également passer la commande souhaitée
ASPNETCORE_ENVIRONMENT
dans la commande dotnet publish en tant qu'argument en utilisant:par exemple:
Cela générera le web.config avec l'environnement correct spécifié pour votre projet:
la source
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
EnvironmentName
proprié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.
Le code ci-dessus ajouterait le nom de l'environnement comme
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 se trouveraitProduction
dans le fichier web.config généré. Plus de détails ici2. 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 leProperties/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 ici3. Options de ligne de commande utilisant dotnet publish
De plus, nous pouvons transmettre la propriété en
EnvironmentName
tant qu'option de ligne de commande à ladotnet publish
commande. La commande suivante inclurait la variable d'environnement commeDevelopment
dans le fichier web.config.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
la source
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
la source
Ce que vous devez savoir en un seul endroit:
ASPNETCORE_
.:
comme séparateur. Si la plateforme n'autorise pas les deux points dans les clés de variable d'environnement, utilisez à la__
place.ApplicationHost.config
. L'utilisation de l'éditeur de configuration IIS entraînera l'écriture de vos entrées dans l'applicationWeb.config
- et sera écrasée lors du prochain déploiement!Pour la modification
ApplicationHost.config
, vous souhaitez utiliserappcmd.exe
pour 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
%u007b
pour le crochet gauche.%systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
%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
.la source
/commit:site
les changements sont écrits dans le web.config, afin de les enregistrer dansApplicationHost.config
celui qui devrait utiliser/commit:apphost
-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 esthresult:80070032, message:Command execution failed
. Cependantclear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:site
fonctionne 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.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:
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:
la source
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:
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.
la source
Pour obtenir les détails de l'erreur, j'ai dû ajouter
ASPNETCORE_ENVIRONMENT
une variable d'environnement pour le pool d'applications correspondantsystem.applicationHost/applicationPools
.Remarque: l'application Web dans mon cas était
ASP.NET Core 2
une application Web hébergée surIIS 10
. Cela peut être fait viaConfiguration Editor
inIIS Manager
(voir Modifier des collections avec l'éditeur de configuration pour savoir où trouver cet éditeurIIS Manager
).la source
J'ai créé un référentiel pour publier IIS avec la configuration de l'environnement dans Web.config.
https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment
la source
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.
Tout d'abord, créez le fichier appsettings.json dans le répertoire racine. avec le contenu
Créez ensuite deux autres fichiers de paramètres appsettings.Development.json et appsettings.Production.json avec la configuration nécessaire.
Ajoutez le code nécessaire pour configurer l'environnement dans le fichier Program.cs .
}
Ajoutez le envsettings.json à votre fichier .csproj pour le copier dans le répertoire publié.
Maintenant, modifiez simplement ASPNETCORE_ENVIRONMENT comme vous le souhaitez dans le fichier envsettings.json et publiez- le.
la source