Это зависит от того, какое равенство вы действительно ищете:
- Если у вас была другая копия сборки в другом месте, это должно изменить хэш?
- Если тот же код был перестроен, должно ли это изменить хэш?
- Если код изменился и , то был перестроен, должно ли это изменить хэш?
Вы можете обнаружить, что достаточно просто хэшировать полное имя сборки (или тип) ... но нам нужно знать больше о ваших требованиях, чтобы сказать наверняка.
РЕДАКТИРОВАТЬ: Чтобы ответить на ваш комментарий (первоначально в комментарии, но потом он становился слишком длинным):
Хорошо, это несколько сложно ... файл сборки содержит некоторые вещи, которые меняются в каждой сборке (возможно, дата сборки, возможно, произвольный GUID; прошло некоторое время с тех пор, как я исследовал). Вы захотите выбросить эти данные.
Если вас интересуют только подписи для сборки, вы можете перебрать все открытые типы (в лексикографическом порядке), затем получить хэш этих типов и объединить их. Для каждого хеша вы должны получить всех открытых членов (возможно, защищенных тоже?) И хешировать подписи - например, путем объединения хеша полных имен возвращаемого типа, имени члена и параметров. Для каждого параметра вы хотите указать тип, возможно имя и статус ссылки / выхода. Как видите, все становится довольно сложно:)
Чтобы объединить несколько хешей (поскольку это, безусловно, будет включать где-то :) Я склонен использовать что-то вроде этого:
int hash = 17;
hash = hash * 31 + FirstHash();
hash = hash * 31 + SecondHash();
hash = hash * 31 + ThirdHash();
// etc
return hash;