Comment Créer Déterministe Guid

Dans notre application, nous sommes en créant des fichiers Xml avec un attribut a une valeur Guid. Cette valeur devait être cohérent entre le fichier des mises à niveau. Donc, même si tout le reste dans le fichier change, le guid de la valeur de l'attribut doit rester le même.

Une solution évidente était de créer un dictionnaire statique avec le nom et le Guid à être utilisé pour eux. Alors à chaque fois que nous générer le fichier, nous regardons le dictionnaire pour le nom de fichier et utiliser le guid correspondant. Mais ce n'est pas faisable, parce que nous l'échelle à 100 de fichiers et n'a pas voulu maintenir une grande liste de guid.

Donc une autre approche a été de faire le Guid de la même fonction sur le chemin d'accès du fichier. Depuis que nos chemins d'accès de fichier et de répertoire de l'application à la structure unique, le Guid doit être unique pour ce chemin. Donc, chaque fois qu'une mise à jour, le fichier est le même guid basé sur son chemin. J'en ai trouvé une façon cool pour générer de telles " Déterministe Guid " (Merci Elton Stoneman). Il fait ceci:

private Guid GetDeterministicGuid(string input) 

{ 

//use MD5 hash to get a 16-byte hash of the string: 

MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); 

byte[] inputBytes = Encoding.Default.GetBytes(input); 

byte[] hashBytes = provider.ComputeHash(inputBytes); 

//generate a guid from the hash: 

Guid hashGuid = new Guid(hashBytes); 

return hashGuid; 

} 

Donc, étant donné une chaîne de caractères, le Guid sera toujours le même.

Existe-il d'autres approches ou des recommandations sur les moyens de le faire? Quels sont les avantages ou les inconvénients de cette méthode?

OriginalL'auteur Punit Vora | 2010-04-15