Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 22 de marzo de 2022
.NET

Aunque no es algo frecuente ni especialmente recomendable, hay veces que tenemos que introducir en el código algún tipo de lógica, trazas o comprobaciones que solo queremos aplicar mientras depuramos o desarrollamos y, en ningún caso, queremos que vaya a producción.

En estos casos, aparte de anudarnos un lazo en el dedo mientras mantengamos estos cambios para asegurar la eliminación del código de pruebas antes de subir la aplicación a producción, otra idea puede ser utilizar directivas para que este código solo actúe mientras depuramos, o incluso para evitar la compilación exitosa en modo "Release" (el usado normalmente al publicar).

Las directivas de preprocesador #if y #endif delimitan un bloque de código cuyo interior sólo será analizado por el compilador cuando el símbolo especificado se haya definido. Por ejemplo, el siguiente snippet mostrará el segundo mensaje por consola únicamente si se ha definido el símbolo DEBUG:

Console.WriteLine("Este mensaje aparecerá siempre en consola");

#if DEBUG
   // Código específico para la configuración "Debug"
   Console.WriteLine("Este mensaje aparecerá solo mientras depuro o ejecuto en local");
#endif

El compilador genera automáticamente un símbolo con el nombre de la configuración utilizada para la compilación, convertido a mayúsculas. Por ejemplo, al compilar usando la configuración "Debug" tenemos definido el símbolo DEBUG, si compilamos en "Release" se definirá el símbolo RELEASE, o si usásemos una configuración personalizada llamada "Deploy", podríamos preguntar por el símbolo DEPLOY.

Otra directiva que puede resultar interesante en este escenario es #error. Esta directiva permite generar un error CS1029 que romperá la compilación y mostrará en la salida el error indicado.

Por ejemplo, la introducción del siguiente código en cualquier punto de la aplicación hará que la compilación falle cuando se utilice la configuración RELEASE:

Console.WriteLine("Esta versión no es correcta");

#if RELEASE
    #error ¡Cuidado! ¡Esta versión es incorrecta y no se puede publicar!
#endif

Desde línea de comandos, el error aparecerá así:

C:\DirectivesDemo>dotnet build -c release
Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  All projects are up-to-date for restore.
C:\DirectivesDemo\Program.cs(8,12): 
error CS1029: #error: '¡Cuidado! ¡Esta versión es incorrecta y no se puede publicar!' 
[C:\DirectivesDemo\DirectivesDemo.csproj]

Build FAILED.

C:\DirectivesDemo\Program.cs(8,12): 
error CS1029: #error: '¡Cuidado! ¡Esta versión es incorrecta y no se puede publicar!' 
[C:\DirectivesDemo\DirectivesDemo.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.72

C:\DirectivesDemo>_

Y lo mismo ocurriría desde Visual Studio:

Error CS1029

También, si tenemos varias configuraciones, otra posibilidad sería generar el error cuando no esté definido el símbolo DEBUG, con lo que la versión actual no podría compilarse más allá de la configuración usada en local:

Console.WriteLine("Esta versión no es correcta");

#if !DEBUG
    #error ¡Cuidado! ¡Esta versión es incorrecta y no se puede publicar!
#endif

¡Espero que os sea de utilidad!

Publicado en Variable not found.

Aún no hay comentarios, ¡sé el primero!