Digamos que tengo una aplicación con errores como este:programático MSIL inyección
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("2 + 1 = {0}", Add(2, 1));
}
static int Add(int x, int y)
{
return x + x; // <-- oops!
}
}
}
La aplicación ya está compilado y desplegado en el medio natural. Alguien ha encontrado el error y ahora están solicitando una solución. Si bien pude volver a implementar esta aplicación con la solución, es una molestia extrema por razones fuera de mi control. Solo quiero escribir un parche para el error.
Específicamente, quiero insertar mi propio MSIL en el archivo de origen assenmbly ofensivo. Nunca he hecho algo como esto antes, y Google no ha encontrado ninguna información útil. Si tan sólo pudiera ver una muestra de cómo hacer esto en el código anterior, me ayudaría a tremendamente :)
¿Cómo mediante programación inyecto mi propia MSIL en un ensamblado de .NET compilado?
[Editar para agregar:] A los que preguntaron: No necesito hotswapping en tiempo de ejecución. Está perfectamente bien para mí cerrar la aplicación, manipular el ensamblaje y luego reiniciar el programa nuevamente.
[Editar una vez más:] Parece que el consenso general es "manipular el conjunto es una forma mala para parchear un programa". No iré por ese camino si es un bad idea.
Voy a dejar la pregunta abierta, porque la inyección MSIL aún podría ser útil para otros fines :)
¿quieres hacer esto mientras la aplicación se está ejecutando o cuando su fuera de línea? – Peter
En caso de que se pregunte por qué no solo volvería a implementar mi aplicación, el software que estoy escribiendo consta de medio concierto de archivos ex y dlls, y solo se lanza una o dos veces al año. Implementar la aplicación es un gran proceso. Los parches y las revisiones nos permitirán neutralizar errores entre implementaciones con mayor frecuencia. – Juliet
¿Medio concierto? ¡Wow eso es mucho! –