让用户在部署后编辑配置文件

时间:2013-03-23 10:06:44

标签: c# deployment app-config

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

现在我有一个app.config文件,我希望用户能够修改(即使在运行程序之后),但我不知道安装程序在哪里转储文件,我不希望用户以文件系统为基础。

我在想的是 - 我要求用户指定一些目录(自游戏以来需要发生) - 我在那里检查配置文件,如果不存在,我从根目录复制它程序可以看到 - 然后读取'save'文件夹中的那个。

那说,它听起来像一个非常丑陋和黑客的解决方案 - 还有更好的解决方案吗?

2 个答案:

答案 0 :(得分:9)

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

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

我还建议为此实现某种UI,即使它非常基本。普通用户不能直接编辑XML,误差太大。

答案 1 :(得分:1)

您可以使用应用程序(或用户)设置来保留用户可能要在配置中进行的任何更改。请参阅ApplicationSettingsBase课程和this article。 假设您的应用程序包含一个名为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中(对于漫游配置文件)。