Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 3803|Respuesta: 7

[Consejos] Usa Roslyn para compilar dinámicamente código C# y ejecutarlo

[Copiar enlace]
Publicado en 6/7/2024 16:59:03 | | | |
Requisitos: El proyecto necesita generar diferentes algoritmos y lógicas según las necesidades del cliente; en este momento, el código puede no estar escrito muerto, y puede ser necesario algún motor de reglas para ejecutar la lógica personalizada.

La Plataforma de Compiladores .NET, con nombre en clave Roslyn, es el conjunto de APIs de compiladores y análisis de código de código abierto de Microsoft para los lenguajes C# y Visual Basic (VB.NET).

Revisión:

La diferencia entre el compilador Roslyn MSBuild
https://www.itsvse.com/thread-9596-1-1.html

.NET/C# Plataforma compiladora Roslyn
https://www.itsvse.com/thread-10740-1-1.html
Primero, crea una nueva aplicación de consola con la siguiente referencia:

El código es el siguiente:



Compilamos el código C# para producir un tamaño de archivo test.exe solo3KB。 El archivo resultante test.exe no puede ejecutarse como un ejecutable de Windows, y el error se informa de la siguiente manera:

Excepción no gestionada: System.IO.FileNotFoundException: No se ha cargado un archivo o ensamblador "System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" o alguna de sus dependencias. El sistema no puede encontrar el archivo especificado.
Así que ejecuta la aplicación de consola con los siguientes comandos:

Tras la ejecución, el error se informa de la siguiente manera:

Se encontró un error fatal. La 'hostpolicy.dll' de la biblioteca necesaria para ejecutar la aplicación no se encontraba en 'D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\'.
No se ejecutó como una app autónoma.
  - La aplicación se ejecutó como una aplicación autónoma porque no se encontró 'D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\test.runtimeconfig.json'.
  - Si esta es una aplicación dependiente del framework, añadir el archivo 'D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\test.runtimeconfig.json' y especificar el framework correspondiente.
En términos generales, necesitas un archivo *.runtimeconfig.json, que contiene información en tiempo de ejecución y la versión de .NET Core utilizada, referencia:El inicio de sesión del hipervínculo es visible.

Así que, crea un nuevo archivo test.runtimeconfig.json con la siguiente configuración:

Vuelve a ejecutar el comando y descubre que puede ejecutarse normalmente, como se muestra en la siguiente figura:



Referencia:

El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.





Anterior:.NET/C# convierte PDFs en imágenes basadas en PDFtoImage
Próximo:ERP Kingdee Cloud Starry Sky (1) Comprensión sencilla
 Propietario| Publicado en 6/7/2024 16:59:46 |
.NET/C# implementa actualizaciones calientes de plugins DLL basadas en AssemblyLoadContext
https://www.itsvse.com/thread-10783-1-1.html
 Propietario| Publicado en 24/7/2024 17:25:55 |
 Propietario| Publicado en 3/12/2024 10:14:58 |
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0 和 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.11\ 区别



Ensamblajes de referencia (¡información de tipo y metadatos, sin incluir implementaciones específicas!) ):C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0
Biblioteca de ejecución (implementación específica): C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.11\



 Propietario| Publicado en 3/12/2024 10:16:03 |
Ensamblajes de referencia y documentación




 Propietario| Publicado en 10/12/2024 17:46:00 |
Al mismo tiempo, puedes generar un archivo de símbolos (.pdb)
 Propietario| Publicado en 10/12/2024 17:49:22 |
Configurar modo de lanzamiento
 Propietario| Publicado en 30/6/2025 13:40:49 |
Pequeña zorra Publicado el 24-7-2024 17:25
https://github.com/roslynpad/roslynpad/releases

LINQPad:https://www.linqpad.net/
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com