为单独的用户单独配置文件

时间:2016-11-24 05:56:29

标签: c# winforms app-config

这里我们有一个各种用户使用的winforms桌面应用程序。每个用户在本地运行应用程序。也就是说,构建文件夹对于每个用户是分开的。它们在本地应用程序配置文件下也有不同的配置键集来运行应用程序(不同的连接字符串和键选项)。您可能会猜到更新版本的痛苦程度。

我的目的是将此winforms桌面应用程序放在共享文件夹中并将其共享给每个用户。这里的挑战是它们的配置是分开的。

我尝试使用不同的名称合并单独的键并使用代码下的条件,但作业似乎很大。

有没有办法收集bin文件夹下的所有这些单独的配置文件,并根据用户名在它们之间切换?解决这个问题的最简单方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我的主张是使用修改后的.NET设置机制。通常,您可以具有特定于应用程序和用户的特定设置。在这种情况下,我们想要使用用户设置。

此方法的问题是用户设置不存储在bin文件夹中,而是存储在其他位置,即%userprofile%\ appdata \ local ... here是详细信息)。但是,您可以通过编写自定义设置提供程序来覆盖此行为。幸运的是有人已经做到了。来自此answerCustomSettingsProvider就像一个魅力。

总结这里是一个解决方案:

  • 要向项目添加设置文件,请右键单击 项目,然后选择添加 - >新项目...... 最后,找到 设置文件模板。如果双击添加的文件,将弹出设计器。我们假设这个文件名为 MySettings
  • 定义一些特定于用户的设置。

  • CustomSettingsProvider添加到您的项目中。

  • 在项目中查找MySettings类,并为其添加以下属性:

[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))]

  • 在使用设置之前,您必须使用它们指定文件的路径。我建议将其作为您应用程序中的第一件事。在以下示例中,设置文件将在当前文件夹中创建,其名称将包含用户名:

MySettings.Default.SettingsKey = $@".\user_{Environment.UserName}.config";

  • 如果包含设置的文件不存在CustomSettingsProvider,则会创建一个空文件。
  • 关闭应用程序时,请调用 MySettings.Default.Save(); 将用户设置保存到文件中。
  • 自行运行您的应用程序只是为了创建模板文件。然后为其他用户相应更改其名称制作此模板的副本。
  • 我的方法的缺点是您在设置文件中没有连接字符串部分。因此,对ConfigurationManager.ConnectionStrings的引用必须替换为对MySettings.PropertyWithConnectionString的引用。