簡體   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