将用户设置文件存储在executables目录中

时间:2013-09-26 13:21:49

标签: c# wpf application-settings

我正在开发一个.NET 4.0软件,它可以读写应用程序设置。完成后,软件将存储在文件服务器上。不会执行本地实例。

默认情况下,用户设置XML文件存储在每个用户AppData\...目录中,但我想将文件位置更改为存储可执行文件的同一目录。

这意味着,所有用户都应使用具有修改内容的相同XML用户设置文件。

我已阅读this question并回答用户描述如何以JSON格式实现的内容。

问题: 是否有其他(简单)方法告诉Settings类,从何处读取和写入用户设置?

以下内容已经讨论过:

  • 用户将始终拥有足够的访问权限来修改设置文件。
  • 其他用户应该选择对设置进行修改。
  • 用户将从不同的网络计算机启动应用程序。
  • 我可以实现我自己的应用程序处理的XML文件(我会记住这一点)。

2 个答案:

答案 0 :(得分:2)

我不确定您是否可以使用标准的“设置”类获得所需的功能。但我确实认为你可以完成搜索的最终结果。

如果您想要对用户2立即强制执行设置更改,您应该查看将设置存储在数据库中。然后,您的应用程序可以定期检查此表以进行更改。例如,如果用户1更改了控件的颜色,则每次用户2加载具有该控件的屏幕时,都会检查数据库中的颜色。

或者,如果您希望在启动应用程序时应用这些设置。使用datacontract + xml序列化程序将设置写入网络可访问路径/文件夹中您选择的文件。然后确保您可以处理此文件的读/写锁定。

这些只是我认为您应该考虑的一般性想法。我不认为这些是你唯一的选择。如果你想要追求任何这些东西,那么有很多博客和stackoverflow页面都包含你需要的所有信息。

祝你好运!

答案 1 :(得分:2)

我在项目中添加了一个名为Application Configuration File的自定义AppSettings.config,并将其Copy to output属性设置为Copy if newer(这会将配置文件复制到构建项目的executables文件夹中

我的设置必须归类为appSettings,而不是applicationSettings(不可编辑)或userSettings(存储在用户AppData文件夹中)。这是一个例子:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- single values -->
    <add key="Name" value="Chris" />
    <add key="Age" value="25" />

    <!-- lists, semi-colon separated-->
    <add key="Hobbies" value="Football;Volleyball;Wakeboarding" />
  </appSettings>
</configuration>

查看下面的代码,如何访问和修改它们:

Configuration AppConfiguration =
    ConfigurationManager.OpenMappedExeConfiguration(
        new ExeConfigurationFileMap {ExeConfigFilename = "AppSettings.config"}, ConfigurationUserLevel.None);

var settings = AppConfiguration.AppSettings.Settings;
// access
var name = settings["Name"].Value;
var age = settings["Age"].Value;
var hobbies = settings["Hobbies"].Value.Split(new[]{';'});
// modify
settings["Age"].Value = "50";
// store (writes the physical file)
AppConfiguration.Save(ConfigurationSaveMode.Modified);

我将内置app.config用于默认应用程序设置,并希望将它们与AppSettings.config中的可编辑全局设置分开。这就是我使用自定义配置文件的原因。


这不是问题的直接答案,但它解决了如何在自定义配置文件中存储和共享可编辑应用程序设置的问题。

希望它可以帮助其他任何用户! : - )