在我们的应用程序中,我们正在创建具有 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 总是相同的。
有没有其他方法或推荐的方法来做到这一点?这种方法的优点或缺点是什么?