我有一个程序,我将使用VS内置的部署程序进行部署。
现在我有一个app.config文件,我希望用户能够修改(即使在运行程序之后),但我不知道安装程序在哪里转储文件,我不希望用户以文件系统为基础。
我在想的是 - 我要求用户指定一些目录(自游戏以来需要发生) - 我在那里检查配置文件,如果不存在,我从根目录复制它程序可以看到 - 然后读取'save'文件夹中的那个。
那说,它听起来像一个非常丑陋和黑客的解决方案 - 还有更好的解决方案吗?
答案 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
中(对于漫游配置文件)。