W naszej aplikacji tworzymy pliki Xml z atrybutem o wartości Guid. Ta wartość musiała być spójna między aktualizacjami plików. Więc nawet jeśli wszystko inne w pliku się zmieni, wartość guid dla atrybutu powinna pozostać taka sama.
Jednym z oczywistych rozwiązań było utworzenie słownika statycznego z nazwą pliku i identyfikatorami Guid, które miały być dla nich używane. Następnie za każdym razem, gdy generujemy plik, szukamy w słowniku nazwy pliku i używamy odpowiedniego guidu. Ale to nie jest wykonalne, ponieważ możemy skalować do setek plików i nie chcieliśmy utrzymywać dużej listy poradników.
Więc innym podejściem było uczynienie Guid tym samym na podstawie ścieżki do pliku. Ponieważ nasze ścieżki plików i struktura katalogów aplikacji są unikalne, identyfikator Guid powinien być unikalny dla tej ścieżki. Tak więc za każdym razem, gdy uruchamiamy aktualizację, plik otrzymuje ten sam identyfikator guid na podstawie swojej ścieżki. Znalazłem fajny sposób na generowanie takich „ deterministycznych przewodników ” (dzięki Elton Stoneman). Zasadniczo robi to:
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;
}
Więc mając ciąg, Guid zawsze będzie taki sam.
Czy są jakieś inne podejścia lub zalecane sposoby, aby to zrobić? Jakie są wady i zalety tej metody?