In unserer Anwendung erstellen wir XML-Dateien mit einem Attribut, das einen Guid-Wert hat. Dieser Wert musste zwischen den Dateiaktualisierungen konsistent sein. Selbst wenn sich alles andere in der Datei ändert, sollte der Guid-Wert für das Attribut gleich bleiben.
Eine naheliegende Lösung bestand darin, ein statisches Wörterbuch mit dem Dateinamen und den für sie zu verwendenden Guids zu erstellen. Wenn wir dann die Datei generieren, suchen wir im Wörterbuch nach dem Dateinamen und verwenden die entsprechende Anleitung. Dies ist jedoch nicht möglich, da wir möglicherweise auf Hunderte von Dateien skalieren und keine große Liste von Anleitungen führen wollten.
Ein anderer Ansatz bestand darin, die Guid basierend auf dem Pfad der Datei gleich zu machen. Da unsere Dateipfade und die Anwendungsverzeichnisstruktur eindeutig sind, sollte die Guid für diesen Pfad eindeutig sein. Jedes Mal, wenn wir ein Upgrade ausführen, erhält die Datei die gleiche Anleitung basierend auf ihrem Pfad. Ich habe einen coolen Weg gefunden, um solche ' Deterministic Guids ' zu generieren (Danke Elton Stoneman). Es macht im Grunde das:
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;
}
Wenn Sie also eine Zeichenfolge angeben, ist die Guid immer dieselbe.
Gibt es andere Ansätze oder empfohlene Wege, um dies zu tun? Was sind die Vor- oder Nachteile dieser Methode?