2012-07-05 7 views
6

Ich versuche, ein Tool zu erstellen, das intelligent genug ist, um Programmversions-Binärdateien, die mit identischem C# -Code zu verschiedenen Zeitpunkten erstellt wurden, programmatisch zu untersuchen und zu schließen, dass der Code identisch ist während es in der Lage ist, irgendwelche Codeänderungen aufzunehmen, wenn sie in dem C# -Code vorhanden sind, der verwendet wird, um diese Binärdateien zu erzeugen.Wiederholbare Builds aus demselben C# -Quellcode auf verschiedenen Maschinen

Ich habe versucht, eine Reihe von Ansätzen zu verwenden, aber um dies kurz zu halten, werde ich nur auf den neuesten Versuch bleiben. Ich führe ildasm mit der Option/text für die Binärdateien und ersetze die GUIDs für anonyme Felder usw. in Text, aber wenn die Binärdateien von verschiedenen PCs kommen, finde ich, dass der Text von ILDASM/Text-Option neu angeordnet wird. Die Binärdateien, die aus demselben Code stammen, jedoch von demselben Setup auf verschiedenen Computern kompiliert wurden, werden ebenfalls stark neu angeordnet. Jeder Vorschlag, wie man diese Neuordnung von IL kontrollieren könnte, würde sehr geschätzt werden?

Prost

PS: Alle alternativen Strategien dieser zuverlässig zu erreichen, sind auch sehr willkommen.

+1

und Sie können den Quellcode nicht vergleichen, weil? ... –

+0

Auch dies ist wahrscheinlich relevant: http://StackOverflow.com/Questions/1335427/Why-does-c-sharp-Generate-Different-Exes -for-the-same-source-code –

+1

Wenn möglich, könnten Sie sagen, warum brauchen Sie ein solches Tool? Vielleicht gibt es eine viel bessere Lösung für das Problem, das Sie zu lösen versuchen, indem Sie es erstellen. –

Antwort

2

fand ich, dass eine Lösung nach dem, was in seinem Beitrag erwähnte Eric Lippert, was sein Mandant für die Beilegung gelandet werden, indem die Prozessoraffinität für den Übersetzungsvorgang zu 01 zu erreichen. Danach sind die erzeugten Executables/Dlls nahezu identisch mit denen von som mvid und guids. Das Ausführen von ILDASM für diese Binärdateien mit dem Textmodus und das Erstellen eines einfachen Hashing-Tools zum Entfernen dieses zufälligen Materials bietet eine solche Lösung. Ich versichere es nur, um es zu vervollständigen und anderen zu helfen, die dieses Problem haben könnten.

7

Waiting for Eric Lippert aufzuwecken :) - Community Wiki aus @mikez ‚s Kommentar:

Wenn ein Hauptentwickler (Eric Lippert) auf dem Compiler-Team spricht, sollten Sie hören: http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/ detaillierte Erklärung enthält und eine starke Empfehlung für die es nicht (wahrscheinlich als Antwort auf diese Frage präzise) zu tun:

kompiliert die gleiche C# Programm zweimal garantiert die gleiche binäre Ausgabe zu produzieren?

Nr