8

我有一个程序,我将使用 VS 内置的部署包进行部署。

现在我有一个 app.config 文件,我希望用户能够修改它(即使在运行程序之后),但我不知道安装程序究竟在哪里转储文件,而且我不希望用户能够根植他们的文件系统。

我在想的是 - 我要求用户指定一些目录(因为它是一个游戏,无论如何都需要发生) - 我在那里检查配置文件,如果它不在那里,我从程序可以的根目录复制它看 - 然后阅读“保存”文件夹中的那个。

也就是说,它听起来像一个非常丑陋和hacky的解决方案 - 有更好的解决方案吗?

4

2 回答 2

9

我不会鼓励用户修改 app.config。app.config 被复制到与您的应用程序 exe 相同的目录中,并且通常包含您的应用程序正确运行所依赖的设置,例如数据库连接字符串、系统默认值等。您通过让用户直接更改其中的设置来玩危险的游戏。

更安全的方法是将另一个 XML 文件导出到用户文档文件夹中,他们可以在其中覆盖应用程序设置。首先将您的应用加载到 app.config 中,然后使用用户自己的配置文件中的任何设置覆盖这些值。

我还建议为此实现某种 UI,即使它真的很基础。您的普通用户不会习惯于直接编辑 XML,错误的余地太大。

于 2013-03-23T10:26:23.577 回答
1

您可以使用应用程序(或用户)设置来保留用户可能想要在配置中进行的任何更改。请参阅ApplicationSettingsBase课程和这篇文章。假设您的应用程序包含一个名为 的用户设置Score,由一个名为 的类在内部管理MyUserSettings

public class MyUserSettings : ApplicationSettingsBase
{
    [UserScopedSetting()]
    [DefaultSettingValue(0)]
    public int Rank
    {
        get
        {
            return (int)this["Score"];
        }
        set
        {
            this["Score"] = value;
        }
    }
}

您可以使用以下方法保存当前值,通常是在主窗体关闭时Save

myUserSettings.Save();

如果您希望用户直接修改某些设置,您可以使用属性网格或您自己的绑定MyUserSettings类实例的表单。如果设置被标记为“用户”,则这些值将存储在user.config文件中%InstallRoot%\Documents and Settings\username\Local Settings%InstallRoot%\Documents and Settings\username\Application Data(用于漫游配置文件)中。

于 2013-03-23T10:34:32.603 回答