在我们的应用程序中,我们使用一个具有 Guid 值的属性创建 XML 文件。此值需要在文件升级之间保持一致。因此,即使文件中的其他所有内容都发生了变化,属性的 guid 值也应该保持不变。
一个显而易见的解决方案是创建一个包含文件名和用于它们的 Guids 的静态字典。然后,每当我们生成文件时,我们查找文件名的字典并使用相应的 guid。但这是不可行的,因为我们可能扩展到100的文件,并不想维护大名单的指南。
因此,另一种方法是根据文件的路径使 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 将始终是相同的。
Are there any other approaches or recommended ways to doing this? What are the pros or cons of that method?