Cela dépend de quel genre d'égalité que vous cherchez, vraiment:
- Si vous aviez une autre copie de l'assemblée à un autre endroit, devrait-il changer le hachage?
- Si le même code a été reconstruit, cela devrait-il changer le hachage?
- Si le code a changé et alors a été reconstruit, cela devrait-il changer le hachage?
Vous peut trouver que tout hachant le nom complet de l'ensemble (ou type) est assez ... mais nous avions besoin de savoir plus sur vos besoins pour dire à coup sûr.
EDIT: Pour répondre à votre commentaire (à l'origine dans un commentaire, mais il se faisait trop longtemps):
D'accord, c'est un peu délicat ... un fichier d'assemblage contient certaines choses qui changent à chaque construction (peut-être une date de construction, éventuellement un GUID aléatoire, c'est un peu de temps depuis que j'ai enquêté). Vous voudrez jeter ces données.
Si vous n'êtes intéressé que par signatures pour l'ensemble vous pouvez aussi parcourir tous les types publics (dans l'ordre lexicographique), puis obtenir le hash de ces types et les combiner. Pour chaque hachage, vous obtiendrez tous les membres du public (éventuellement protégés aussi?) Et hacher les signatures - par ex. en combinant le hachage des noms complets du type de retour, du nom de membre et des paramètres. Pour chaque paramètre, vous voudriez inclure le type, éventuellement le nom, et le statut de ref/out. Comme vous pouvez le voir, il devient assez compliqué :)
Pour combiner plusieurs hash (comme cela va clairement impliquer quelque part :) J'ai tendance à utiliser quelque chose comme ceci:
int hash = 17;
hash = hash * 31 + FirstHash();
hash = hash * 31 + SecondHash();
hash = hash * 31 + ThirdHash();
// etc
return hash;
1. La copie exacte de l'assemblage à un emplacement différent doit avoir le même hachage que l'assemblage d'origine. 2. Si le même code a été reconstruit, je veux que le hachage reste inchangé. 3. Oui, le code a été changé puis reconstruit Je veux que le hachage soit différent, au moins dans le cas d'un assemblage. Avec le hash du type, je peux accepter que changer le corps de la méthode (et laisser toutes les signatures inchangées) ne changera pas le hachage. – mgamer
@michael: J'ai modifié ma réponse pour refléter votre commentaire. –