このアプリケーションでは、Guid値を持つ属性を持つXmlファイルを作成しています。この値は、ファイルのアップグレード間で一貫している必要がありました。したがって、ファイル内の他のすべてが変更された場合でも、属性のGUID値は同じままである必要があります。
明らかな解決策の1つは、ファイル名とそれに使用するGUIDを使用して静的辞書を作成することでした。次に、ファイルを生成するたびに、辞書でファイル名を検索し、対応するGUIDを使用します。しかし、これは実行可能ではありません。何百ものファイルに拡張でき、GUIDの大きなリストを維持したくないためです。
したがって、別のアプローチは、ファイルのパスに基づいてGUIDを同じにすることでした。ファイルパスとアプリケーションディレクトリ構造は一意であるため、Guidはそのパスに対して一意である必要があります。したがって、アップグレードを実行するたびに、ファイルはそのパスに基づいて同じGUIDを取得します。そのような「決定論的ガイド」を生成するための1つのクールな方法を見つけました(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は常に同じになります。
これを行うための他のアプローチまたは推奨される方法はありますか?その方法の長所と短所は何ですか?