Как создавать детерминированные направляющие

В нашем приложении мы создаем файлы XML с атрибутом, который имеет значение Guid. Это значение должно быть согласованным между обновлениями файлов. Таким образом, даже если все остальное в файле изменяется, значение guid для атрибута должно оставаться неизменным.

Одним из очевидных решений было создание статического словаря с именем файла и направляющими для них. Затем всякий раз, когда мы генерируем файл, мы ищем словарь для имени файла и используем соответствующий guid. Но это неосуществимо, потому что мы можем масштабировать до сотен файлов и не хотим поддерживать большой список руководств.

Поэтому другим подходом было сделать Guid таким же, основываясь на пути к файлу. Поскольку наши пути к файлам и структура каталогов приложений уникальны, Guid должен быть уникальным для этого пути. Поэтому каждый раз, когда мы запускаем обновление, файл получает один и тот же guid в зависимости от своего пути. Я нашел один классный способ создать такойДетерминированные гиды'(Спасибо Элтон Стоунман). Это в основном делает это:

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; 

} 

Таким образом, учитывая строку, Guid всегда будет одинаковым.

Есть ли другие подходы или рекомендуемые способы сделать это? Каковы плюсы или минусы этого метода?

Ответы на вопрос(5)

Ваш ответ на вопрос