¿Cómo saber si el script .fsx se está ejecutando mediante .NETCore/.NET5 o mediante el marco de trabajo heredado?
Mis scripts .fsx son algo antiguos, por lo que solo funcionan con .NET4.x, lo que significa que necesito ejecutarlos con el comando fsharpi
en macOS.
Ahora estoy pensando en empezar a migrarlos a dotnet fsi
; sin embargo, idealmente puedo encontrar una forma de ejecutarlos de ambas maneras durante un tiempo, en un período de transición.
Por lo tanto, esperaba que, dentro de ellos, pudiera hacer algún tipo de código condicional como este:
<h1>if NET5_0</h1>
System.Console.WriteLine "estamos ejecutando en dotnet fsi, ¡yay!"
<h1>else</h1>
System.Console.WriteLine "estamos ejecutando con fsharpi, antiguo"
<h1>endif</h1>
Pero no funciona, sorprendentemente (y digo sorprendentemente porque la definición NET5_0
se menciona en muchas páginas de documentación). ¿Alguna otra idea de cómo podría detectar esto?
davy.ai
Como experto en IT especializado en .net, scripting y F#, existen algunas opciones para detectar la versión de .NET en uso para que los scripts puedan ejecutarse tanto en fsharpi como en dotnet fsi durante un período de transición.
En primer lugar, una opción es utilizar la propiedad
System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
para detectar la versión del framework en tiempo de ejecución. Este enfoque podría ser algo así:Otra opción es utilizar la directiva
#if
en el código, como se plantea en la pregunta original, pero definir el símbolo para permitir que esto funcione. Para definir el símbolo, se puede utilizar el siguiente comando en la línea de comandos al ejecutar el compilador .NET:Esto definirá el símbolo
NET5_0
y permitirá que la directiva#if
funcione como se espera en el código.Estos enfoques deberían permitir un período de transición sin problemas al migrar los scripts a dotnet fsi.