另外的解决方案怎么样,尤其是在说明之后:
截至今天,我的项目中有一个 App.config 文件。
为什么你没有自己的设置类?您可以使用代码中的一组默认设置来维护它——这比尝试维护多个 App.config 文件要干净得多。比如:
[Serializable]
public class AppSettings
{
public string FileDir { get; set; }
public AppSettings()
{
FileDir = string.Empty;
}
public AppSettings(string fDir)
{
FileDir = fDir;
}
public void SetDefault()
{
FileDir = "SomeDefault";
}
}
您可以有不同的实例,或者根据您的需要,您可以加载第二组设置:
m_dSettings = SettingsIO.GetSettings(Path.Combine(Application.StartupPath, "DefaultSettings.xml"));
m_cSettings = SettingsIO.GetSettings(Path.Combine(Application.StartupPath, "CustomSettings.xml"));
m_eSettings = new AppSettings("F:\\Dir");
SettingsIO.WriteSettings(m_dSettings, Path.Combine(Application.StartupPath, "DefaultSettings.xml"));
SettingsIO.WriteSettings(m_dSettings, Path.Combine(Application.StartupPath, "CustomSettings.xml"));
SettingsIO.WriteSettings(m_eSettings, Path.Combine(Application.StartupPath, "ExtraSettings.xml"));
持久化上述内容的类:
using System.Xml.Serialization;
using System.IO;
public static class SettingsIO
{
public static void WriteSettings(AppSettings settings, string settingsFilePath)
{
XmlSerializer serializer = new XmlSerializer(typeof(AppSettings));
if (!Directory.Exists(Path.GetDirectoryName(settingsFilePath)))
Directory.CreateDirectory(Path.GetDirectoryName(settingsFilePath));
using (StreamWriter SW = new StreamWriter(settingsFilePath))
serializer.Serialize(SW, settings);
}
public static AppSettings GetSettings(string settingsFilePath)
{
AppSettings m_Settings = null;
if (File.Exists(settingsFilePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(AppSettings));
using (FileStream FS = new FileStream(settingsFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader SR = new StreamReader(FS))
m_Settings = (AppSettings)serializer.Deserialize(SR);
}
if (m_Settings == null)
m_Settings = new AppSettings();
return m_Settings;
}
}