4

我主要是 C# .NET 4.0 开发人员,现在我正在重新考虑过去存储和检索应用程序设置的方法。

过去,我使用过多种方法,从带有制表符分隔键/值的简单“平面”文本文件到分层 XML 文件,以及介于两者之间的其他一些方法。我过去使用过(并且正在考虑再次使用)内置的 App.Config/AppSettings 类,但是没有任何内置方法可以保存您从该源加载的数据(我可以进入我在这样做时遇到的困难,但这不是问题的重点)。

这里的重点是,所有这些方法都有其缺点,虽然有些方法比其他方法效果更好,但有些方法比其他方法更易于使用,我正在努力确定一些一致且可靠的方法。

我的问题可能有一些有效的答案,所以我将被迫选择最好的答案,是这样的:如果任何内置框架会“你”推荐用于保存和加载数据进出设置怎么办?可执行文件附带的文件,或者如果不是内置框架,您会推荐什么标准?XML?“平面”文件?独立数据库?

假设配置本身不会那么大,并且将从数据库中读取任何实际数量的数据(或使用其他一些技术)。

4

3 回答 3

2

虽然我是一个注册表迷,并且宁愿在那里有我的设置,但在我的 c# 应用程序中,我使用了内置的设置 - 所以在项目属性下,您可以定义负载及其默认值,然后使用

Properties.Settings.Default.<settingname>

也可以设置它们,所以Properties.Settings.Default.HideDisabled = true;

你可以用

Properties.Settings.Default.Save();

我对此没有任何问题,但是,正如您所说,一切都有优点和缺点。

于 2012-08-22T07:24:05.740 回答
1

只是另一种方式(kernel32),它与 C# 甚至 C# 4.0 无关,但是当我们开始列出变体时,它必须在这里有效

namespace Ini {
    public class IniFile {
        private string path;
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section,
            string key, string val, string filePath);
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,
                    string key, string def, StringBuilder retVal,
            int size, string filePath);
        public IniFile(string INIPath) {
            path = INIPath;
            }
        public void IniWriteValue(string Section, string Key, string Value) {
            WritePrivateProfileString(Section, Key, Value, this.path);
            }
        public string IniReadValue(string Section, string Key) {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255, this.path);
            return temp.ToString();
            }
        }
    }
于 2012-08-22T07:28:17.377 回答
1

我处理过的一些应用程序涉及本地数据库,我们也使用该数据库文件来保存我们的设置。它可以工作,但是感觉有点不对劲,如果您希望在应用程序未运行时能够修改设置,这可能是个问题。(绕过崩溃或类似的事情。)

大多数情况下,我只会使用存储在Environment.SpecialFolder.ApplicationData文件夹中的 XML 文件并使用DataContractSerializer. 它允许您进行一些版本控制,但最重要的是,当您的设置对象上的某些属性是新的或不存在时,它能够加载和保存 XML 文件。它不会使应用程序崩溃,当您再次保存设置时,它只会保存最新版本。我认为它干净、刻薄、简单。

于 2012-08-22T07:28:59.340 回答