Вы не можете ожидать, что двоичные файлы будут одинаковыми для любого воссозданного файла - не говоря уже о сборках. Все метаданные документа, включая данные, созданные, дата изменения будет отличаться.
Если вам нужно сравнить, вам нужно подписать сборку (строгое наименование) и сравнить маркер открытого ключа плюс версию сборки.
UPDATE
То, что вы делаете, - это напрашивается на неприятности, хотя я понимаю, что иногда это нужно делать. На вашем месте я бы скомпилировал бинарный файл на сервере и заставил бы клиентов загружать бинарный файл, а не код. В конце концов, клиенты могут не иметь компилятора C # на своем компьютере.
Чтобы ответить на ваш вопрос, , если вы настаиваете на компиляции на клиенте, каждый раз, когда вы компилируете, создаете локальный хеш и сохраняете его в реестре, каком-то файле и т. Д., А затем сравниваете этот хеш.
ОБНОВЛЕНИЕ 2
Компилятор C # никогда не гарантирует, что он создаст один и тот же двоичный файл. Многие вещи создаются во время компиляции, например, именование анонимных функций, резервное значение для автоматических свойств, анонимные методы, внутренние GUID ... все это будет создано во время компиляции, и пока компилятор использует соглашение об именах, имена которого обычно заканчиваются то же самое, не гарантируется .