¿Qué herramientas Pasos posteriores a la modificación de compilación de IL?
-
16-09-2019 - |
Pregunta
Un reciente mención de PostSharp me recordó esto:
El año pasado donde trabajé, estábamos pensando en el uso de la instrumentación PostSharp para inyectar en nuestro código. Esto fue en un entorno de integración de Team Foundation Server Team Build / continua.
Pensando en ello, tengo una sensación molesta por la forma en PostSharp opera - edita el IL generado por los compiladores. Esto me molestó un poco.
No estaba tan preocupado que no sería PostSharp hacer su trabajo correctamente; Estaba preocupado por el hecho de que esta era la primera vez que podía recordar haber escuchado acerca de una herramienta como esta. Estaba preocupado de que otras herramientas podrían no tener esto en cuenta.
De hecho, a medida que avanzábamos a lo largo, que hicieron tienen algunos problemas derivados del hecho de que PostSharp estaba recibiendo confundido acerca de qué carpeta la IL original. Esto estaba rompiendo nuestra construye. Parecía ser debido a un conflicto con el objetivo MSBUILD que resuelve las referencias del proyecto. El conflicto parece ser debido al hecho de que PostSharp utiliza un directorio temporal para almacenar las versiones modificadas del IL.
En cualquier caso, yo no tenía StackOverflow para referirse a aquel entonces! Ahora que hago, me gustaría pedir a todos ustedes si conoce otras herramientas que editan IL como parte de un proceso de construcción; o si Microsoft tiene ese tipo de herramienta en cuenta en Visual Studio, MSBUILD, Generar equipo, etc.
Actualización:. Gracias por las respuestas
La conclusión parece ser que, al menos, con el VS 2010, Microsoft realmente debe tener en cuenta que este tipo de cosas puede suceder. Así que si hay problemas en esta área en VS2010, a continuación, Microsoft puede compartir la culpa.
Solución
Yo sé que Dotfuscator, un código de Ofuscador, no modificar la IL asambleas de asambleas y se utiliza en muchos procesos de construcción.
La IL se modifica no sólo para la ofuscación de código y protección, sino también para inyectar funcionalidad adicional en sus aplicaciones (ver nuestras) blog (de PreEmptive en tiempo de ejecución de Inteligencia aquí .
Además de Infraestructura Común compilador de Microsoft tiene la capacidad de leer en asambleas, modificarlos y volver a escribir ellos. Ver CodePlex para el proyecto.
Otros consejos
Mono.Cecil , una biblioteca marco de la ampliación del conjunto de herramientas System.Reflection, se utiliza por el Lin proyecto Fu .
No estoy seguro acerca de la compatibilidad proceso de construcción, se debe comprobar a cabo para el tamaño.
.NET 4.0 incluye las href="http://research.microsoft.com/en-us/projects/contracts/" rel="nofollow noreferrer"> contratos proyecto de Microsoft Research, que realiza en tiempo de ejecución (y algunos de tiempo de compilación) afirmaciones de las condiciones de pre / post de sus métodos. Las afirmaciones se implementan en una biblioteca, y un compilador .NET emite las condiciones pre / post como métodos de llamadas de la IL. Sin embargo, ya que los contratos generalmente se especifican en el inicio de un método, una herramienta secundaria necesita volver a escribir la IL poner las afirmaciones en el orden correcto y ubicaciones correctas.
EDIT:
- cccheck es la herramienta que se ejecuta posterior a la generación y es una de electricidad estática que verifica contratos en tiempo de compilación
- ccrewrite es la herramienta que se ejecuta cccheck post, la reescritura de la IL y generar el tiempo de ejecución de la comprobación de los contratos
(no puedo encontrar ninguna información técnica adicional acerca de estas herramientas)
Todavía no he utilizado Visual Studio 2010, pero he visto una demostración de los contratos de códigos de características y se integra en el proceso de construcción del IDE. cccheck debe funcionar siempre, devolviendo un código de si los contratos están presentes en el conjunto construido. Si están presentes, el código podría significar que ccrewrite debe ejecutar.
Fody es una herramienta extensible para tejer ensamblados .NET basada en una arquitectura plugin.