独立用户的独立配置文件

Separate Config Files for Separate Users

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

我的目的是把这个winforms桌面应用放在一个共享文件夹中,共享给各个用户。这里的挑战是它们的配置是分开的。

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

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

谢谢。

我的建议是使用经过修改的 .NET 设置机制。通常,您可以拥有特定于应用程序和特定于用户的设置。在这种情况下,我们想使用用户设置。

这种方法的问题是用户设置没有存储在 bin 文件夹中,而是存储在其他地方,即 %userprofile%\appdata\local... (here are details). However, you can override this behaviour by writing a custom settings provider. Luckily someone has already did it. CustomSettingsProvider from this answer 很有魅力。

总结一下就是一个解决方案:

  • 为了向您的项目添加设置文件,请右键单击 project 然后 select Add -> New item... 最后,找到 设置文件 模板。如果双击添加的文件,将弹出一个设计器。假设此文件名为 MySettings.
  • 定义一些用户特定设置。

  • CustomSettingsProvider 添加到您的项目。

  • 在项目中找到MySettingsclass,添加如下属性:

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

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

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

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