es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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í:

    let frameworkDescription = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
    
    if frameworkDescription.Contains(".NET Framework 4") then
        System.Console.WriteLine("estamos ejecutando con fsharpi, heredado")
    else
        System.Console.WriteLine("estamos ejecutando en dotnet fsi, ¡bien!")
    

    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:

    dotnet fsi --define:NET5_0
    

    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.

Comments are closed.