2011-06-02 14 views
13

la preparación:¿Cuáles son las diferencias en el desmontaje de dos ejecutables .NET creados a partir del mismo código fuente?

  • mismo código fuente se utiliza construir un .NET 4 ejecutable (aplicación de consola) en dos máquinas diferentes.
  • Microsoft Visual Studio 2010 SP1 .NET 4 configuraciones son idénticas en las dos máquinas
  • ildasm projectName.exe /out:test.txt se realiza en el .exe de ambas máquinas.
  • El resultado de ildasm difiere de las diferencias esperadas (mvid, privateimplementationdetails).

Pregunta:
He pasado algún tiempo la creación de una aplicación para obtener el CRC de un ejecutable .NET y han tenido éxito en hacer caso omiso de todos los datos en tiempo de compilación diferentes.

Estoy eliminando todos los datos por encima de la línea // =============== CLASS MEMBERS DECLARATION =================== en la salida ildasm.exe. Esto ignora el MVID. Estoy construyendo el .exe sin información de depuración. Y, por último, analizo el resultado de <PrivateImplementationDetails>{GUID} e ignoro esos.

Luego CRC el archivo de texto restante.

Los CRC son los mismos cuando el mismo proyecto está construido en la misma computadora, pero difieren cuando el mismo proyecto está construido en una computadora diferente con el mismo código fuente y la configuración de MSVS 2010.

¿Alguien sabe de alguna información dependiente de la máquina almacenada en el ensamblado de un ejecutable .NET?

A continuación se muestra un ejemplo de las diferencias. Parece ser que las diferentes identificaciones están siendo asignados cada objeto y clase, pero me resulta extraño que esto sólo se diferencian cuando el código está construido en diferentes máquinas ...

  `class DSC_PI.MainWindow/'<>c__DisplayClass21' V_2,` 
     `class DSC_PI.MainWindow/'<>c__DisplayClass10' V_2,` 

     `class DSC_PI.MainWindow/'<>c__DisplayClass1e' V_3,` 
     `class DSC_PI.MainWindow/'<>c__DisplayClassd' V_3,` 

Cualquier idea sería muy apreciada.

+2

¿Estás seguro de que ambos sistemas tienen los mismos service packs instalados, incluidas las mismas versiones de todos los ensamblados .NET en el GAC? ¿Estás haciendo una reconstrucción completa desde un directorio limpio que solo contiene código fuente? Me he encontrado con problemas extraños similares cuando las versiones anteriores de ensamblajes se dejan tiradas en los directorios bin y obj. –

+0

Hmm, gracias. Los examinaré, pero siento que este problema inesperado podría pasarse por alto, ya que utilizaremos una "máquina de construcción maestra" para construir y crc todo. Crisis evitada allí, pero todavía estoy interesado en descubrirlos. Lamentablemente, tal vez tenga que dejar este problema atrás y seguir adelante (he estado trabajando en esta pequeña cosa desde hace mucho tiempo ...). Mantendré esto actualizado si encuentro algo nuevo. – ZayJay

+6

Sugeriría que, cuando llegue a la "máquina de creación maestra", use MSBUILD para hacer sus compilaciones desde la línea de comandos en lugar de utilizar Visual Studio. He tenido mucha mejor suerte obteniendo resultados reproducibles con MSBUILD. Además, es más fácil de automatizar. –

Respuesta

1

¿Ambos sistemas tienen la misma cantidad de núcleos? Me imagino que cuando se trata de contar el sufijo de nombre de variable, el resultado puede variar según la cantidad de subprocesos utilizados para el compilador.

Cuestiones relacionadas