C# 为不同的用户提供不同的配置文件

C# 为不同的用户提供不同的配置文件,c#,winforms,app-config,C#,Winforms,App Config,这里我们有一个由不同用户使用的winforms桌面应用程序。每个用户在本地运行应用程序。也就是说,构建文件夹对于每个用户都是独立的。他们在本地应用程序配置文件下也有一组不同的配置键来运行应用程序(不同的连接字符串和键选项)。您可能会猜到更新版本有多痛苦 我的目的是将此winforms桌面应用程序放在共享文件夹中,并将其共享给每个用户。这里的挑战是它们的配置是分开的 我试着在代码下用不同的名称和使用条件合并不同的键,但这项工作似乎很繁重 有没有办法收集bin文件夹下所有这些单独的配置文件,并根据用

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

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

我试着在代码下用不同的名称和使用条件合并不同的键,但这项工作似乎很繁重

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


谢谢。

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

这种方法的问题是,用户设置不存储在bin文件夹中,而是存储在其他位置,即%userprofile%\appdata\local。。。(这些是细节)。但是,您可以通过编写自定义设置提供程序来覆盖此行为。幸运的是,已经有人做了
CustomSettingsProvider
此功能非常有效

总之,这里有一个解决方案:

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

  • 自定义设置Provider
    添加到项目中

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

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

  • 在使用设置之前,您必须指定包含这些设置的文件的路径。我建议把它作为你申请的第一件事。在以下示例中,将在当前文件夹中创建设置文件,其名称将包含用户名:
MySettings.Default.SettingsKey=$@“\user_{Environment.UserName}.config”

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

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

这种方法的问题是,用户设置不存储在bin文件夹中,而是存储在其他位置,即%userprofile%\appdata\local。。。(这些是细节)。但是,您可以通过编写自定义设置提供程序来覆盖此行为。幸运的是,已经有人做了
CustomSettingsProvider
此功能非常有效

总之,这里有一个解决方案:

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

  • 自定义设置Provider
    添加到项目中

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

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

  • 在使用设置之前,您必须指定包含这些设置的文件的路径。我建议把它作为你申请的第一件事。在以下示例中,将在当前文件夹中创建设置文件,其名称将包含用户名:
MySettings.Default.SettingsKey=$@“\user_{Environment.UserName}.config”

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

应用程序是否使用数据库连接?最好在一个中央数据库表中配置所有特定于用户的值,并在应用程序初始化时映射这些值。我建议使用便携式SQLite数据库,在这种情况下,为每个用户存储设置。注意:应用程序需要访问权限才能读写SQLitedatabase@SouvikGhosh谢谢你的建议。由于每台计算机的连接驱动程序不同,甚至DB键也有不同的值,因此这可能不是最好的方法。应用程序是否使用数据库连接?最好在一个中央数据库表中配置所有特定于用户的值,并在应用程序ini时映射这些值