2012-07-05 16 views
6

Próbuję stworzyć narzędzie, które będzie wystarczająco inteligentne, aby programowo zbadać pliki binarne wersji Release, wyprodukowane przez identyczny kod C# skompilowany na dwóch oddzielnych machinach w różnych momentach i stwierdzić, że kod był identyczny będąc w stanie wykryć wszelkie zmiany kodu, jeśli są obecne w kodzie C# używanym do tworzenia tych plików binarnych.Powtarzalne kompilacje z tego samego kodu źródłowego C# na różnych maszynach

Próbowałem użyć wielu podejść, ale aby zachować ten krótki, będę trzymać się najnowszej próby. Uruchamiam ildasm z opcją/text w plikach binarnych i zastępuję GUID dla anonimowych pól itp. W tekście, ale gdy pliki binarne pochodzą z różnych sztuk, okazuje się, że tekst utworzony przez ILDASM/tekst został zmieniony. Pliki binarne pochodzące z tego samego kodu, ale skompilowane przez tę samą konfigurację na różnych komputerach, również pojawiają się w dużym stopniu uporządkowane. Jakąkolwiek sugestię, w jaki sposób można kontrolować to ponowne zamawianie IL, byłoby docenione?

Cheers

PS: Wszelkie alternatywne strategie niezawodnie realizacji tego są również mile widziane.

+1

i nie można porównać kodu źródłowego, ponieważ? ... –

+0

Co więcej, jest to prawdopodobnie istotne: http://stackoverflow.com/questions/1335427/why-does-c-sharp-generate-different-exes -do-tego-tego-kodu źródłowego –

+1

Jeśli to możliwe, czy możesz powiedzieć, dlaczego potrzebujesz takiego narzędzia? Być może istnieje znacznie lepsze rozwiązanie problemu, który próbujesz rozwiązać, tworząc go. –

Odpowiedz

2

Okazało się, że to rozwiązanie zgodne co Eric Lippert wspominał w swoim stanowisku, co jego klient zakończył się rozliczenia za może być osiągnięty poprzez ustawienie koligacji procesora dla procesu kompilacji do 01. Następnie pliki wykonywalne/biblioteki DLL są prawie identyczne pod względem odrzucenia do som mvid i guids. Uruchamianie ILDASM na tych plikach binarnych w trybie tekstowym i budowanie prostego narzędzia do mieszania w celu usunięcia tego losowego materiału zapewnia takie rozwiązanie. Po prostu zapewniam to w celu ukończenia i pomocy innym, którzy mogą stanąć przed tym problemem.

7

Waiting for Eric Lippert obudzić :) - Wiki z komentarzem @mikez „s:

Kiedy główny deweloper (Eric Lippert) w zespole kompilator mówi, należy słuchać: http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/ zawiera szczegółowe wyjaśnienie i zalecenie silne, że nie robi to (prawdopodobnie w odpowiedzi na to pytanie precyzyjnie):

kompiluje ten sam program w C# dwukrotnie gwarantowane do wytworzenia tej samej wyjście binarne?

nr