2009-06-30 10 views
3

est-il possible de dire si un assemblage a changé?Comment vérifier si un assemblage a changé

J'ai un projet standard qui génère un assembly appelé MyAssembly.dll.

Dans un projet séparé, je lis l'assemblage et génère un hachage.

Lorsque je génère un hachage pour l'assemblage, il est différent chaque fois que je recompile. J'ai défini la version d'assembly pour être statique, y a-t-il d'autres attributs que j'ai besoin de changer?

class Program 
{ 
    static void Main(string[] args) 
    { 
     var array = File.ReadAllBytes(@"MyAssembly.dll"); 
     SHA256Managed algo = new SHA256Managed(); 
     var hash = algo.ComputeHash(array); 

     Console.WriteLine(Convert.ToBase64String(hash)); 
    } 
} 

Merci

Rohan

+0

Combien de classes auriez-vous dans cet assemblage? –

+0

n'importe quel nombre de classes, pour l'instant il n'y a qu'une classe –

Répondre

4

Vous aurez probablement besoin d'utiliser l'attribut numéro de version. Un hachage ne fonctionnera pas car à chaque fois que vous recompilez un assemblage, cela va être différent - même si le code n'a pas changé du tout. La raison en est que chaque fois que vous compilez, le compilateur incorpore un guid dans l'assembly et place le même guid dans le fichier .pdb correspondant. Le guid changera chaque fois que l'assembly est compilé.

Voici comment le débogueur associe un assembly à la version correcte de son fichier .pdb (c'est aussi la raison pour laquelle vous devez toujours enregistrer le fichier .pdb sur tout ce que vous publiez et vous ne pouvez pas générer de pdb correspondre à un assemblage existant)

2

Vous pouvez stocker le hachage dans un fichier texte après qu'il est généré, puis vérifiez contre la prochaine fois que vous recompiler.

+0

c'est ce que je fais, même quand il n'y a pas de changements dans le code une recomplie génère un nouveau hachage. –

1

Eh bien, si c'est un assemblage que vous gérez vous-même, je suggère d'ajouter un numéro de version et auto-increase le numéro de version chaque fois que vous construisez cet assemblage.

Ensuite, vous pouvez vérifier le numéro de version à la place.

+0

Le numéro de version est le bon moyen de vérifier si un assemblage a changé, est compatible –

+0

Il est, mais il pourrait être la DLL est d'une source externe qui ne maintient pas sa versionnumbers (honte à eux!). – Stormenet

+0

L'incrémentation de la version à chaque fois qu'une construction a lieu ne me dira pas si le code a changé. Je veux vraiment faire est de vérifier après une recomplie si un assemblage a changé. Je ne veux pas faire de construction sélective ou créer des scripts de construction personnalisés pour ne construire que des projets qui ont changé. –

0

This project semble faire l'affaire en démontant chaque fichier et laisser tomber le GUID MVID avec quelques autres bits avant de générer un hachage MD5. Il a une dépendance sur ildasm.exe.

Questions connexes