Al leer estas dos preguntas / respuestas pude ejecutar una aplicación Asp.net 5 en el servidor IIS 8.5.
Asp.net vNext beta temprana publica en IIS en Windows Server
¿Cómo configurar una aplicación MVC6 para que funcione en IIS?
El problema es que la aplicación web todavía está usando env.EnvironmentName
valor Development
incluso cuando se ejecuta en IIS.
Además, quiero ejecutar dos versiones de la misma Web (Puesta en escena, Producción) en el mismo servidor, por lo que necesito un método para establecer la variable para cada Web por separado.
¿Como hacer esto?
Properties\launchSettings.json
para simular otro entorno para la depuración en Visual Studio.Respuestas:
Esta respuesta se escribió originalmente para ASP.NET Core RC1. En RC2, ASP.NET Core pasó de un controlador genérico httpPlafrom a uno específico de aspnetCore. Tenga en cuenta que el paso 3 depende de la versión de ASP.NET Core que esté utilizando.
Resulta que las variables de entorno para los proyectos ASP.NET Core se pueden establecer sin tener que establecer variables de entorno para el usuario o tener que crear múltiples entradas de comandos.
Configuration Editor
.Configuration Editor
system.webServer/aspNetCore
(RC2 y RTM) osystem.webServer/httpPlatform
(RC1) en elSection
cuadro combinadoApplicationhost.config ...
en elFrom
cuadro combinado.enviromentVariables
elemento, seleccione'environmentVariables' element
, luegoEdit Items
.De esta manera, no tiene que crear usuarios especiales para su grupo ni crear entradas de comandos adicionales
project.json
. Además, al agregar comandos especiales para cada entorno se rompe "compilar una vez, desplegar muchas veces", ya que tendrá que llamardnu publish
por separado para cada entorno, en lugar de publicar una vez y desplegar el artefacto resultante muchas veces.Actualizado para RC2 y RTM, gracias a Mark G y tredder.
fuente
system.webServer/aspNetCore
lugar.Actualice web.config con una sección <environmentVariables> en <aspNetCore>
O para evitar perder esta configuración al sobrescribir web.config, realice cambios similares en applicationHost.config especificando la ubicación del sitio como sugiere @NickAb.
fuente
Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ...
Normalmente para establecer alguna variable, escribiría algo como esto:Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging
¿qué me estoy perdiendo?appcmd
lugar.Set-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
Editar: a partir de los lanzamientos de RC2 y RTM, este consejo está desactualizado. La mejor manera que he encontrado para lograr esto en la versión es editar las siguientes secciones web.config en IIS para cada entorno:
system.webServer/aspNetCore
:Edite la entrada variable de entorno y agregue una configuración de variable de entorno:
ASPNETCORE_ENVIRONMENT
:< Your environment name >
Como alternativa al enfoque de drpdrp, puede hacer lo siguiente:
En su project.json, agregue comandos que pasen la variable ASPNET_ENV directamente a Kestrel:
Al publicar, use la
--iis-command
opción para especificar un entorno:Encontré que este enfoque es menos intrusivo que crear usuarios adicionales de IIS.
fuente
Tengo mis aplicaciones web (PRODUCCIÓN, ESCENARIO, PRUEBA) alojadas en el servidor web IIS. Por lo tanto, no fue posible confiar en la variable de entorno del sistema operativo ASPNETCORE_ENVIRONMENT, porque establecerla en un valor específico (por ejemplo, STAGING) tiene efecto en otras aplicaciones.
Como solución alternativa, definí un archivo personalizado (envsettings.json) dentro de mi solución visualstudio:
con el siguiente contenido:
Luego, según mi tipo de aplicación (Producción, Puesta en escena o Prueba) configuré este archivo de forma acorde: suponiendo que estoy implementando la aplicación TEST, tendré:
Después de eso, en el archivo Program.cs solo recupere este valor y luego configure el entorno de webHostBuilder:
Recuerde incluir el envsettings.json en PublishOptions (project.json):
Esta solución me permite tener la aplicación ASP.NET CORE alojada en el mismo IIS, independientemente del valor de la variable de entorno.
fuente
Después de buscar en Google, encontré una solución que consta de dos pasos.
El primer paso es establecer la variable de entorno de todo el sistema ASPNET_ENV en Producción y reiniciar el servidor de Windows . Después de esto, todas las aplicaciones web obtienen el valor 'Producción' como EnvironmentName.
El segundo paso (para habilitar el valor 'Puesta en escena' para la puesta en escena web) fue bastante más difícil de hacer funcionar correctamente, pero aquí está:
Ahora la web de ensayo debe tener el nombre de entorno establecido en "ensayo".
Actualización: en Windows 7+ hay un comando que puede establecer variables de entorno desde el indicador CMD también para un usuario específico. Esto genera ayuda más muestras:
fuente
Alternativamente, podría pasar el deseado
ASPNETCORE_ENVIRONMENT
en el comando de publicación dotnet como argumento usando:p.ej:
Esto generará web.config con el entorno correcto especificado para su proyecto:
fuente
Además de las opciones mencionadas anteriormente, hay un par de otras Soluciones que funcionan bien con implementaciones automatizadas o requieren menos cambios de configuración.
1. Modificación del archivo del proyecto (.CsProj)
MSBuild admite la
EnvironmentName
propiedad que puede ayudar a establecer la variable de entorno correcta según el entorno que desea implementar. El nombre del entorno se agregaría en web.config durante la fase de publicación.Simplemente abra el archivo del proyecto (* .csProj) y agregue el siguiente XML.
El código anterior agregaría el nombre del entorno como
Development
para la configuración de depuración o si no se especifica ninguna configuración. Para cualquier otra configuración, el nombre del entorno estaríaProduction
en el archivo web.config generado. Más detalles aquí2. Agregar la propiedad EnvironmentName en los perfiles de publicación.
También podemos agregar la
<EnvironmentName>
propiedad en el perfil de publicación. Abra el archivo de perfil de publicación que se encuentra enProperties/PublishProfiles/{profilename.pubxml}
Esto configurará el nombre del Entorno en web.config cuando se publique el proyecto. Más detalles aquí3. Opciones de línea de comando usando dotnet Publish
Además, podemos pasar la propiedad
EnvironmentName
como una opción de línea de comando aldotnet publish
comando. El siguiente comando incluiría la variable de entorno comoDevelopment
en el archivo web.config.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
fuente
Para ampliar la respuesta de @ tredder, puede modificar el entorno Variables utilizando
appcmd
Puesta en escena
%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST
Producción
%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST
fuente
Lo que necesitas saber en un solo lugar:
ASPNETCORE_
.:
como separador. Si la plataforma no permite dos puntos en las teclas de variable de entorno,__
úsela.ApplicationHost.config
. El uso del Editor de configuración de IIS hará que sus entradas se escriban en la aplicación, ¡Web.config
y se sobrescribirán con la próxima implementación!Para modificar
ApplicationHost.config
, desea usarappcmd.exe
para asegurarse de que sus modificaciones sean consistentes. Ejemplo:%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
Los caracteres que no son seguros para URL se pueden escapar como Unicode, como
%u007b
para el corchete izquierdo.%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
.fuente
/commit:site
los cambios están escritos en la web.config, para guardarlos en elApplicationHost.config
que debe usar/commit:apphost
-section:system.webServer/aspNetCore /-"environmentVariables.
(con menos para eliminar la variable de entorno) no se puede ejecutar durante la canalización de lanzamiento de Azure. El error eshresult:80070032, message:Command execution failed
. Sin embargoclear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:site
funciona bien. Borra toda la sección aspNetCore para el sitio web, pero no es un problema, ya que se parametriza durante el lanzamiento.Al igual que otras respuestas, quería asegurarme de que mi configuración de entorno ASP.NET Core 2.1 persistiera en todas las implementaciones, pero que solo se aplicara al sitio específico.
Según la documentación de Microsoft, es posible establecer la variable de entorno en el grupo de aplicaciones utilizando el siguiente comando de PowerShell en IIS 10:
Desafortunadamente, todavía tengo que usar IIS 8.5 y pensé que no tenía suerte. Sin embargo, todavía es posible ejecutar un script simple de PowerShell para establecer un valor de variable de entorno específico del sitio para ASPNETCORE_ENVIRONMENT:
fuente
La solución @tredder con aplicación de edición Host.config es la que funciona si tiene varias aplicaciones diferentes ubicadas dentro de directorios virtuales en IIS.
Mi caso es:
Entrando en applicationHost.config y creando manualmente nodos como este:
<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>
y reiniciar el IIS hizo el trabajo.
fuente
Para obtener los detalles sobre el error, tuve que agregar
ASPNETCORE_ENVIRONMENT
una variable de entorno para el grupo de aplicaciones correspondientesystem.applicationHost/applicationPools
.Nota: la aplicación web en mi caso era
ASP.NET Core 2
una aplicación web alojada enIIS 10
. Se puede hacer a través deConfiguration Editor
inIIS Manager
(consulte Edición de colecciones con el Editor de configuración para averiguar dónde encontrar este editorIIS Manager
).fuente
He creado un repositorio para publicar IIS con la configuración del entorno en Web.config.
https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment
fuente
He modificado la respuesta que se da @Christian Del Bianco . Cambié el proceso para .net core 2 y superior como archivo project.json ahora absoluto.
Primero, cree el archivo appsettings.json en el directorio raíz. con el contenido
Luego cree otros dos archivos de configuración appsettings.Development.json y appsettings.Production.json con la configuración necesaria.
Agregue el código necesario para configurar el entorno al archivo Program.cs .
}
Agregue envsettings.json a su archivo .csproj para copiarlo en el directorio publicado.
Ahora solo cambie el ASPNETCORE_ENVIRONMENT como desee en el archivo envsettings.json y publíquelo .
fuente