private string GetPreviousConfigFileName(bool isRoaming) {
if (!ConfigurationManagerInternalFactory.Instance.SupportsUserConfig) {
throw new ConfigurationErrorsException(SR.GetString(SR.UserSettingsNotSupported));
}
string prevConfigFile = isRoaming ? _prevRoamingConfigFileName : _prevLocalConfigFileName;
if (String.IsNullOrEmpty(prevConfigFile)) {
string userConfigPath = isRoaming ? ConfigurationManagerInternalFactory.Instance.ExeRoamingConfigDirectory : ConfigurationManagerInternalFactory.Instance.ExeLocalConfigDirectory;
Version curVer = CreateVersion(ConfigurationManagerInternalFactory.Instance.ExeProductVersion);
Version prevVer = null;
DirectoryInfo prevDir = null;
string file = null;
if (curVer == null) {
return null;
}
DirectoryInfo parentDir = Directory.GetParent(userConfigPath);
if (parentDir.Exists) {
foreach (DirectoryInfo dir in parentDir.GetDirectories()) {
Version tempVer = CreateVersion(dir.Name);
if (tempVer != null && tempVer < curVer) {
if (prevVer == null) {
prevVer = tempVer;
prevDir = dir;
}
else if (tempVer > prevVer) {
prevVer = tempVer;
prevDir = dir;
}
}
}
if (prevDir != null) {
file = Path.Combine(prevDir.FullName, ConfigurationManagerInternalFactory.Instance.UserConfigFilename);
}
if (File.Exists(file)) {
prevConfigFile = file;
}
}
//Cache for future use.
if (isRoaming) {
_prevRoamingConfigFileName = prevConfigFile;
}
else {
_prevLocalConfigFileName = prevConfigFile;
}
}
return prevConfigFile;
}