我想出了一个解决方案,可以帮助未来的开发人员解决这个问题。我意识到,出于某种原因,更新版本读取了一些以前的配置设置,但不是最后一个。例如,如果您有此应用程序文件夹:
myapp_0000000000000000_0001.0000_a4e7e981ca9c18fa
myapp_0000000000000000_0001.0000_a4e7e981ca9c19ee
myapp_0000000000000000_0001.0000_a4e7e981ca9c20aa
更新时,配置设置是从与上一个不同的某个随机文件夹复制的(我不知道这是否是随机的,可能会采用最旧的,但我不确定)。
因此,如果您删除了其他文件夹,并且只保留了最后一个版本,那么当您更新时,除了从这个仅有的一个文件夹中获取配置设置之外别无选择。自己试试吧。
所以我制作了这个每次应用程序启动时运行的代码片段,它删除了旧版本的文件夹,所以当下一次更新到来时,一切都会正常工作。
private void ClearOldConfigurations()
{
var level = ConfigurationUserLevel.PerUserRoamingAndLocal;
var configuration = ConfigurationManager.OpenExeConfiguration(level);
var configurationFilePath = configuration.FilePath;
var routePieces = configurationFilePath.Split(Path.DirectorySeparatorChar);
var toRetainFolder = string.Empty;
var toClearFolder = string.Empty;
for (int i = routePieces.Length - 1; i > 1; i--)
{
if (routePieces[i].ToLower() == "data")
{
toRetainFolder = string.Join(Path.DirectorySeparatorChar.ToString(), routePieces.Take(i));
toClearFolder = string.Join(Path.DirectorySeparatorChar.ToString(), routePieces.Take(i - 1));
break;
}
}
if (string.IsNullOrWhiteSpace(toRetainFolder) || string.IsNullOrWhiteSpace(toClearFolder))
{
return;
}
foreach (var dir in Directory.GetDirectories(toClearFolder))
{
if (dir.ToLower().Trim() != toRetainFolder.ToLower().Trim())
{
try
{
Directory.Delete(dir, true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
可能不是最干净的解决方案,但对我有用。