このアプリケーションでは、Guid値を持つ属性を持つXmlファイルを作成しています。この値は、ファイルのアップグレード間で一貫している必要があります。したがって、ファイル内の他のすべてが変更された場合でも、属性のguid値は同じままである必要があります。
1つの明白な解決策は、ファイル名とそれらに使用されるGUIDを使用して静的辞書を作成することでした。次に、ファイルを生成するときはいつでも、ファイル名の辞書を検索し、対応するGUIDを使用します。しかし、これは、数百のファイルにスケーリングする可能性があり、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は常に同じになります。
これを行う他のアプローチまたは推奨される方法はありますか?その方法の長所と短所は何ですか?