martes, 16 de enero de 2024

Como agregar entrada al web.config desde Genexus al hacer el deploy


Al agregar o modificar un elemento del web.config en la carpeta web del modelo (RutaDeMiModelo\CSharpModel\Web\web.config) al hacer el deploy la configuracion por defecto de genexus, no considera lo que se ponga adicionalmente en el web.config

si queremos hacer un deploy y que el web.config tenga una personalizacion una forma es modificando los archivos 

  1. C:\Program Files (x86)\GeneXus\GeneXus17\Deploy\CSharp\GeneXus.csharp.Server.targets 
  2. C:\Program Files (x86)\GeneXus\GeneXus17\ApplicationServers\Templates\CSharpWeb\IIS_Base.stg



Vamos a modificar el archivo IIS_Base.stg agregando

 
location()::=<<
/*otro codigo existente */
$if (MiNuevaPropiedadSupport)$
	$locationNueva()$
$endif$
>>

locationNueva()::=<<
<location path="miruta">
 <system.webServer>
  <httpErrors errorMode="Detailed" />
 </system.webServer>
</location>
>>

Vamos a crear un arhivo MisPropiedades.prop y lo vamos a guardar en donde mas les sea de su agrado, en este archivo vamos a definir nuestras propiedades



<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
  <!-- Agregar nuevas propiedades o sobrescribir propiedades existentes -->
  <MiNuevaPropiedadSupport>true</MiNuevaPropiedadSupport>		
 </PropertyGroup>
</Project>

Ahora vamos a modificar el archivo GeneXus.csharp.Server.targets

En la parte superior del archivo vamos agregar el Import a nuestro archivo MisPropiedades.props


<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
 <Import Project="$(GX_PROGRAM_DIR)\Packages\Gxpm\Platforms\GeneXus.CSharp.WorkflowEngine.targets"/>
 <Import Project="$(GX_PROGRAM_DIR)\Packages\Gxpm\Platforms\GeneXus.CSharp.WorkflowClient.targets"/>
 <Import Project="$(GX_PROGRAM_DIR)\Library\GAM\GAM_Backend\Net\GAM_Backend.targets" Condition="'$(IncludeGAMBackend)' == 'true'"/>
		
 <Import Project="MiRuta\MisPropiedades.props" Condition="Exists('MiRuta\MisPropiedades.props')" />
    //... Mas codigo existente

por ultimo vamos agregar codigo en el elemento <GenerateFromTemplate


<GenerateFromTemplate
 TemplateGroupFile="$(WebConfigTemplate)"
 TemplateName="generateConfig"
 Properties="
   DisplayName=$(ProjectName);
   Namespace=$(Namespace);
   IntegratedSecurity=$(IntegratedSecurity);
   RestEnabled=$(RestSupport);
   APIRestSupport=$(APIRestSupport);
   SDEnabled=$(SDSupport);
   HttpsEnabled=$(Https);
   IncludeQueryViewer=$(IncludeQueryViewer);
   WebNotificationSupport=$(WebNotificationSupport);
   HasWorkflow=$(HasWorkflow);
   HasBC=$(HasBCs);
   HasAPIs=$(HasAPIs);
   ChatbotSupport=$(ChatbotSupport);
   DeployOfflineReplicator=$(DeployOfflineReplicator);
   MiNuevaPropiedadSupport = $(MiNuevaPropiedadSupport);"

Ahora al hacer un Deploy va verificar la propiead y va agregar el fragmento que necesitamos en el web.config

Referencias:

StringTemplate