우리의 응용 프로그램에서 우리는 Guid 값을 가진 속성을 가진 Xml 파일을 만들고 있습니다. 이 값은 파일 업그레이드간에 일관성이 있어야했습니다. 따라서 파일의 다른 모든 항목이 변경 되더라도 속성의 guid 값은 동일하게 유지되어야합니다.
한 가지 분명한 해결책은 파일 이름과 사용할 Guid로 정적 사전을 만드는 것이 었습니다. 그런 다음 파일을 생성 할 때마다 파일 이름에 대한 사전을 찾고 해당 guid를 사용합니다. 그러나 이것은 100 개의 파일로 확장 할 수 있고 GUID의 큰 목록을 유지하고 싶지 않기 때문에 실현 가능하지 않습니다.
그래서 또 다른 접근 방식은 파일 경로를 기반으로 Guid를 동일하게 만드는 것입니다. 파일 경로와 응용 프로그램 디렉토리 구조는 고유하므로 Guid는 해당 경로에 대해 고유해야합니다. 따라서 업그레이드를 실행할 때마다 파일은 경로에 따라 동일한 GUID를 가져옵니다. 그런 ' 결정적 가이드 ' 를 생성하는 멋진 방법을 찾았습니다 (Elton Stoneman에게 감사합니다). 기본적으로 다음과 같이합니다.
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는 항상 동일합니다.
이를 수행하는 다른 접근 방식이나 권장되는 방법이 있습니까? 그 방법의 장단점은 무엇입니까?