Quelqu'un connaît-il un moyen de comparer deux assemblages .NET pour déterminer s'ils ont été construits à partir des "mêmes" fichiers sources ?
Je sais qu'il existe des utilitaires de différenciation, comme le plugin pour Reflector, mais je ne suis pas intéressé par l'affichage des différences dans une interface graphique, je veux juste un moyen automatisé de comparer une collection de binaires pour voir s'ils ont été construits à partir des mêmes fichiers sources (ou de fichiers équivalents). Je comprends que plusieurs fichiers sources différents peuvent produire la même IL, et je réalise que le processus ne serait sensible qu'aux différences dans l'IL, pas dans la source originale.
Le principal obstacle à la simple comparaison des flux d'octets pour les deux assemblages est que .NET inclut un champ appelé "MVID" (Module Version Identifier) dans l'assemblage. Ce champ semble avoir une valeur différente pour chaque compilation, donc si vous construisez le même code deux fois, l'assemblage sera différent.
Une question connexe : quelqu'un sait-il comment forcer le MVID à être le même pour chaque compilation ? Cela nous éviterait d'avoir à mettre en place un processus de comparaison qui soit insensible aux différences de valeur du MVID. Un MVID cohérent serait préférable, car cela signifie que des sommes de contrôle standard pourraient être utilisées.
En effet, une société tierce est chargée d'examiner et de signer nos communiqués de manière indépendante, avant que nous soyons autorisés à les diffuser à la production. Cela inclut l'examen du code source. Elle veut confirmer de manière indépendante que le code source que nous lui donnons correspond aux binaires que nous avons construits et testés précédemment et que nous prévoyons actuellement de déployer. Nous recherchons un processus qui leur permette de construire indépendamment le système à partir du code source que nous leur fournissons, et de comparer les sommes de contrôle aux sommes de contrôle des binaires que nous avons testés.
BTW. Veuillez noter que nous utilisons l'intégration continue, les constructions automatisées, le contrôle des sources, etc. Le problème n'est pas lié à un manque de contrôle interne sur les fichiers sources utilisés dans une construction donnée. Le problème est qu'un tiers est chargé de vérifier que la source que nous lui donnons produit les mêmes binaires que ceux que nous avons testés et que nous prévoyons de mettre en production. Elle ne devrait pas faire confiance à nos systèmes ou contrôles internes, y compris le serveur de compilation ou le système de contrôle du code source. Tout ce qui les intéresse, c'est d'obtenir la source associée à la construction, d'effectuer la construction eux-mêmes et de vérifier que les résultats correspondent à ce que nous disons que nous déployons.
La vitesse d'exécution de la solution de comparaison n'est pas particulièrement importante.
merci