独立用户的独立配置文件
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
添加到您的项目。
在项目中找到MySettings
class,添加如下属性:
[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))]
.
- 在使用设置之前,您必须指定一个文件路径。我建议将它作为应用程序中的第一件事。在以下示例中,将在当前文件夹中创建设置文件,它们的名称将包含用户名:
MySettings.Default.SettingsKey = $@".\user_{Environment.UserName}.config";
- 如果带有设置的文件不存在
CustomSettingsProvider
将创建一个空文件。
- 关闭应用程序时调用 MySettings.Default.Save(); 将用户设置保存到文件中。
- 运行您的应用程序一次只为您自己创建一个模板文件。然后为其他用户相应地更改他们的名称制作此模板的副本。
- 我的方法的缺点是设置文件中没有连接字符串部分。因此,对
ConfigurationManager.ConnectionStrings
的引用必须替换为对 MySettings.PropertyWithConnectionString
. 的引用
这里我们有一个供各种用户使用的 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
添加到您的项目。在项目中找到
MySettings
class,添加如下属性:
[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))]
.
- 在使用设置之前,您必须指定一个文件路径。我建议将它作为应用程序中的第一件事。在以下示例中,将在当前文件夹中创建设置文件,它们的名称将包含用户名:
MySettings.Default.SettingsKey = $@".\user_{Environment.UserName}.config";
- 如果带有设置的文件不存在
CustomSettingsProvider
将创建一个空文件。 - 关闭应用程序时调用 MySettings.Default.Save(); 将用户设置保存到文件中。
- 运行您的应用程序一次只为您自己创建一个模板文件。然后为其他用户相应地更改他们的名称制作此模板的副本。
- 我的方法的缺点是设置文件中没有连接字符串部分。因此,对
ConfigurationManager.ConnectionStrings
的引用必须替换为对MySettings.PropertyWithConnectionString
. 的引用