繁体   English   中英

如何在不使用每个应用程序将更新保存在其自己的文件夹中的情况下从一个公共程序集中共享一个公共用户配置(settings.settings)?

[英]How can I share a common user config (settings.settings) from a common assembly without each app saving updates in their own folder?

我有一组要共享应用程序设置的应用程序。 我们称它们为App1,App2和App3

我在一个单独的命名空间中创建了一个公共项目,并处理了该项目中用户配置值的获取和设置。 我使用了该项目属性中的“设置”选项卡来创建用户设置值。

例如,在MyCommon命名空间的静态Configuration类中,我具有以下方法:

public static Config PopulateConfig()
{
  // Config is a simple class containing values pulled from the user config
  Config result = new Config();
  try {
    result.ImportArchiveFolder = MyCommon.Properties.Settings.Default.ArchiveFolder;
    result.ReportFolder = MyCommon.Properties.Settings.Default.ReportFolder;
   }
   catch (Exception ex) {
   MessageBox.Show("Error loading configuration: " + ex.Message,
                   "Configuration error",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Error);
   }
   return result;
}

public static void SaveConfig(Config config)
{
  try {
   if (config.ImportArchiveFolder != MyCommon.Properties.Settings.Default.ArchiveFolder) {
     MyCommon.Properties.Settings.Default.ArchiveFolder = config.ImportArchiveFolder;
   }
   if (config.ReportArchiveFolder != MyCommon.Properties.Settings.Default. ReportFolder) {
     MyCommon.Properties.Settings.Default.ReportFolder = config.ReportArchiveFolder; 
   }
   MyCommon.Properties.Settings.Default.Save();
  }
  catch (Exception ex) {
    MessageBox.Show("Error saving configuration: " + ex.Message,
                    "Configuration error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
  }
}

虽然它能够读取和保存这些值,但MyCommon在用户的AppData结构中的单个exe名称下,例如App2而不是MyCommon

Username\AppData\MyCompany\App1_Url_randomString\V1.0.1.0\user.config
Username\AppData\MyCompany\App2_Url_randomString\V1.0.1.0\user.config

如果尝试使用ConfigurationManager.OpenMappedExeConfiguration打开固定副本,但遇到了绊脚石。

我想我想知道在哪里告诉它放置此共享的配置,我想看到它在AppData文件夹中自动进行管理,但是我不知道如何指定反映共享程序集版本的“特殊文件夹” 我希望配置遵循共享项目。

文件结构应该是这样的

Username\AppData\MyCompany\MyCommon_Url_randomString\V1.0.1.0\user.config

关于ConfigurationManager是,如果我更改程序集的版本,它将读取以前的值并使用这些值创建一个新文件夹,因此我可以在不考虑其配置的情况下运行程序的两个版本。 我希望在这种共享方案中保持这种状态。

Username\AppData\MyCompany\MyCommon_Url_randomString\V1.0.1.0\user.config
                                                    \V1.0.1.1\user.config

我最终将注册表和“设置”用作初始默认设置。

共享程序使用注册表进行设置。 程序启动时,它将查看公用注册表中是否有任何设置,如果有,它将使用这些设置。 如果没有,它将使用它自己的设置文件作为默认值。

使用选项编辑器,管理员可以编辑所有共享应用程序的选项,并将所有设置保存到公共注册表文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM