2012-07-05 17 views
6

Estoy intentando producir una herramienta que sea lo suficientemente inteligente como para examinar programáticamente binarios de versión de lanzamiento producidos por código C# idéntico compilado en dos máquinas separadas en diferentes momentos y concluir que el código era idéntico mientras que puede recoger cualquier cambio de código si está presente en el código C# usado para producir estos binarios.compilaciones repetibles del mismo código fuente C# en diferentes máquinas

He intentado utilizar una serie de enfoques, pero a fin de mantener esto corto me limitaré al último intento. Ejecuto ildasm con la opción/text en los binarios y reemplazo los GUID por campos anónimos, etc. en el texto, pero cuando los binarios provienen de diferentes equipos, encuentro que el texto producido por la opción ILDASM/texto se reordena. Los binarios que se originan en el mismo código pero compilados por la misma configuración en diferentes máquinas también aparecen fuertemente reordenados. ¿Alguna sugerencia de cómo se puede controlar este reordenamiento de IL sería muy apreciada?

Saludos

PS: Cualquier estrategias alternativas de llevar a cabo de forma fiable esto también la mayoría son bienvenidos.

+1

y no se puede comparar el código fuente porque? ... –

+0

Además, esto es probablemente relevante: http://stackoverflow.com/questions/1335427/why-does-c-sharp-generate-different-exes -for-the-same-source-code –

+1

Si es posible, ¿podría decir por qué necesita una herramienta de este tipo? Tal vez haya una solución mucho mejor para el problema que está tratando de resolver al crearlo. –

Respuesta

2

He encontrado que una solución con arreglo a lo de Eric Lippert ha mencionado en su puesto lo que puso fin a su cliente conformándose puede ser alcanzado mediante el establecimiento de la afinidad del procesador para el proceso de compilación a 01. Después de esto, los ejecutables/dlls producidos son casi idénticos en excpetion a som mvid y guids utilizados. Ejecutar ILDASM en estos binarios con el modo de texto y construir una herramienta de hash simple para quitar estas cosas al azar proporciona una solución. Solo estoy proporcionando esto para completarlo y para ayudar a otros que puedan enfrentar este problema.

7

Esperando Eric Lippert para despertar :) - wiki de la comunidad de comentario @mikez 's:

Cuando un desarrollador director (Eric Lippert) en el equipo compilador habla, usted debe escuchar: http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/ contiene una explicación detallada y una fuerte recomendación para no hacerlo (probablemente en respuesta a esta pregunta precisa):

está compilando el mismo programa en C# dos veces garantizada para producir la misma salida binaria?

Cuestiones relacionadas