2010-08-11 14 views
31

JRebel es una herramienta para Java que puede intercambiar automáticamente nuevas versiones de clases a una JVM en ejecución. No solo se pueden cambiar las implementaciones de métodos, también es posible cambiar sus firmas, agregar nuevos o eliminar métodos existentes, y también agregar/eliminar campos. Lo único que no se puede hacer es permitir que la jerarquía de clases se modifique sobre la marcha. Es una gran ayuda para el desarrollo de aplicaciones web en particular.¿Hay algo como JRebel para .NET?

¿Pudo encontrar algo similar para .NET?

+1

¿Cuál es el problema particular con la capacidad de Asp.Net para intercambiar en caliente toda la aplicación cuando actualiza los archivos de la aplicación? –

+0

JRebel puede hacer esto sin volver a compilar toda la aplicación. Eso significa que, como usuario, no pierde información de la sesión, por ejemplo. No estoy seguro de que ASP.NET pueda hacer esto página por página, ya que todas las páginas se compilan en una sola dll. Teniendo en cuenta la naturaleza de la devolución de datos en ASP.NET clásico, probablemente también se rompa al volver a compilar toda la aplicación. – stombeur

+0

Alguien debería responder esta pregunta en lugar de con un "No", pero con un flujo de trabajo de desarrollo que minimice el reinicio de iisexpress o el servidor web que esté utilizando. Por ejemplo, prueba unitaria más: tu código será más sólido cuando lo ejecutes en un servidor web. – Jess

Respuesta

0

Bueno, existe una función de compilación desde VS 2005 que se llama "Editar y Continuar". Puede echar un vistazo ... http://msdn.microsoft.com/en-us/library/ms379578(VS.80).aspx.

Creo que no es tan sofisticado como JRebel.

+7

No está realmente relacionado, y E & C no es realmente una función teniendo en cuenta lo mal implementado y lo inútil que es. –

+1

Lo que JRebel está haciendo es bastante diferente que Editar y Continuar. E & C es una función que solo puede usar durante la depuración de uno. Y la mayor diferencia es que no puede usar Editar y Continuar para una aplicación web alojada en IIS (o el servidor de desarrollo web inútil). Creo que la mayor diferencia es la última. Si está desarrollando una aplicación web grande, el ciclo de compilación/reintroducción es la pérdida de tiempo más importante. – tbaskan

+3

Es una lástima que no funcione en 64 bits. Ojalá Microsoft lo entendiera ... –

-1

There's Rebel.NET que es similar, pero esto requiere la reconstrucción de los binarios y no puede cambiar el código durante la ejecución.

0

La reflexión está integrada en .NET y debería poder hacer la mayoría de esas cosas (escribir/modificar cosas en tiempo de ejecución).

No va a estar tan pulido y listo para tareas como JRebel, pero nuevamente los dos marcos tienen estructuras diferentes para empezar. Puede no ser realista pensar en ellos como equivalentes.

En mi humilde opinión, la sustitución en tiempo de ejecución como una práctica estándar parece una buena manera de corromper el tiempo de ejecución para mí. Si necesita esta funcionalidad de intercambio en caliente, quizás sea mejor que elija un idioma interpretado en lugar de uno compilado.

Además, la sesión suele ser algo que debe evitarse. Si tiene que usarlo para ASP.NET, puede usar algunos proveedores diferentes listos para usar en lugar de uno en proceso, o incluso usar perfiles en su lugar. MSDN page for state manangement

2

No existe tal cosa en el mundo .net .. no tan potente ... hay algo así como Editar y Continuar, pero esto es como "Reemplazar en caliente" en Java y nada más. El problema es que en .net tiene el modelo completo de .dll (s) con sus versiones y dependencias entre dlls apuntando a una versión específica, por lo que no es posible reemplazar dll sin reemplazar todo.

Una solución alternativa será algo así como compilar las clases, agregar montones de redireccionamientos de ensamblaje, de alguna manera descargar y cargar el viejo dll, pero es realmente difícil.

Tenga en cuenta que en Java después de la implementación del "módulo" JSR, tal vez en java 9 no tengamos también JRebel.

2

No existe tal cosa para .Net todavía. Mientras tanto, puedes probar NCrunch (http://www.ncrunch.net/), que ejecuta tus pruebas en segundo plano y, en el momento en que rompes o pases la prueba, se informa en los resultados de la prueba, por lo que no tienes que esperar para reconstruir y probar ejecución como está sucediendo en tiempo real.

Cuestiones relacionadas