Puedo compilar, obtener una instancia e invocar un método de cualquier tipo de C# programáticamente. Hay mucha información sobre eso, incluido StackOverflow (How can I evaluate a C# expression dynamically?). Mi problema es que estoy en el entorno web y no puedo guardar nada en el directorio/bin. Puedo compilar "en memoria" como sugiere el enlace mencionado anteriormente, pero luego no podré "descargar" mi ensamblado personalizado del dominio de aplicación actual. Después de un tiempo, se convertirá en un gran problema de memoria. ¿Es posible abrir un nuevo AppDomain, compilar un nuevo ensamblado "en memoria", evaluar alguna expresión o acceder a algún miembro de ese ensamblado dentro de ese nuevo AppDomain y matar ese AppDomain de forma segura cuando termine, todo eso sin guardar nada en un disco duro ? Gracias de antemano por los enlaces, sugerencias, etc.¿Puedo compilar y ejecutar la expresión de C# sin guardar el ensamblado en el disco?
Respuesta
¿Has echado un vistazo al tipo DynamicMethod en .Net? Este tipo crea la recolección de basura habilitada en métodos de memoria usando Reflection.Emit. Esto suena exactamente a lo que estás buscando.
Eché de menos todo el asunto de DynamicMethod. Leyendo ya ... Todavía no se puede ver cómo usarlo para evaluar una cosa simple como b = Evaluar ("5 <6"). Mirando más, esperando perder algo. ¡Gracias! – Sasha
El autor dice lo que dije en mi pregunta también: o te quedas atascado con un gran problema de memoria o ejecutas un nuevo código en su propio Dominio de Aplicación. Pero el artículo en sí fue divertido, ¡gracias por compartir! – Sasha
- 1. Guardar nsdate en el disco
- 2. Guardar NSMutableArray en el disco
- 3. guardar y compilar automáticamente
- 4. guardar un archivo (de corriente) en el disco usando C#
- 5. Guardar un DynamicMethod en el disco
- 6. ¿Cómo ejecutar el ensamblado en gdb directamente?
- 7. ¿Cómo puedo crear, escribir y luego devolver un archivo en C# sin guardarlo en el disco?
- 8. ¿Cómo puedo usar Bochs para ejecutar el código de ensamblado?
- 9. Compilar e instalar sin ejecutar en Xcode
- 10. ¿Cómo ejecutar el código C++ sin compilarlo?
- 11. Cambiar el tamaño y guardar una imagen en el disco en Monotouch
- 12. ¿Es posible guardar un ensamblaje dinámico en el disco?
- 13. ¿Cómo compilar y ejecutar un archivo sin proyecto en Netbeans?
- 14. Compilar y ejecutar un programa en C en Emacs
- 15. ¿Es posible compilar dinámicamente y ejecutar fragmentos de código C#?
- 16. Cómo compilar y ejecutar un programa C/C++ en el sistema Android
- 17. Buffers de protocolo; guardar datos en el disco y cargar el número de vuelta
- 18. Guardar clasificador en el disco en scikit-learn
- 19. la forma de ejecutar el bloque php desde el terminal sin guardar en un archivo
- 20. ¿Cómo compilar y ejecutar un programa C/C++ en el sistema Android (como MinGW en Windows)?
- 21. Guardar NSCache contenido en disco
- 22. Guardar/Escribir NSMutableArray de los objetos en el disco?
- 23. Ejecutar validaciones de ActiveRecord sin guardar
- 24. Extensión de Chrome: cómo guardar un archivo en el disco
- 25. cómo puedo guardar la estructura en el archivo .... C lang
- 26. ¿Cómo pruebo la unidad para guardar el archivo en el disco?
- 27. ¿Cómo guardar la fecha y hora sin el tiempo?
- 28. Script para guardar datos varbinary en el disco
- 29. Organizing Programming Contest - Cómo compilar y ejecutar
- 30. Depurar el código de C# sin ejecutar la aplicación
Si solo necesita acceder a un método arbitrario de un tipo conocido (y no a la compilación de una expresión más compleja), puede usar el método GetMethod de la clase Type y Delegate.CreateDelegate. Intentaré evitar el uso de un nuevo Dominio de aplicación, si es posible, ya que puede haber mucha complejidad nueva para obtener el Mariscado adecuado. –
Bastante necesito evaluar una expresión C# sobre la marcha. El mismo viejo bool r = Eval ("3> 2"); donde el Eval es algo que me ayudaría a evaluar el bool sin tocar el disco. Entonces, no, la reflexión por sí sola no ayudará aquí. Gracias, sin embargo :) – Sasha