【问题标题】:How to read user settings in app.config from a diff app?如何从差异应用程序中读取 app.config 中的用户设置?
【发布时间】:2015-11-07 11:34:54
【问题描述】:

我有一个带有 App.config 的 WinForms .exe,其中有一堆在运行时设置并保存的用户范围设置。 我希望能够使用 WinForms 应用程序来更改和保存设置,然后单击按钮根据这些设置进行一些工作。 我还想从 sep 读取同一 .config 文件中的用户设置。控制台应用程序,以便我可以安排工作作为计划任务完成。 能够做到这一点的最佳方法是什么?

更新: 我尝试了使用 ConfigurationManager.OpenExeConfiguration 的建议,如一些答案中所述。

Configuration config = ConfigurationManager.OpenExeConfiguration("F:\\Dir\\App.exe");

但是当我尝试像这样检索用户设置时。

string result = config.AppSettings.Settings["DB"].ToString();

我得到一个空引用错误。

从 exe 中的代码但是以下正确返回数据库名称。

Properties.Settings.Default.DB

我哪里出错了?

更新 2:

因此,根据下面的一些答案,我现在可以使用以下内容从 sep 检索我感兴趣的 user.config 文件部分的原始 XML。控制台应用程序。

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"D:\PathHere\user.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);
System.Configuration.DefaultSection configSection = (System.Configuration.DefaultSection)config.GetSection("userSettings");
string result = configSection.SectionInformation.GetRawXml();
Console.WriteLine(result);

但我仍然无法仅提取我感兴趣的特定元素的值。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:
    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = Environment.CurrentDirectory + "\\MyApp.exe.config";
    //i have config in the same directory as my another app         
    System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    var settingsSection = (System.Configuration.ClientSettingsSection)config.GetSection("userSettings/MyApp.Properties.Settings");
    var setting = settingsSection.Settings.Get("MySetting");
    var param = ((setting.Value.ValueXml).LastChild).InnerText.ToString();
    

    【讨论】:

      【解决方案2】:

      应该这样做:

      var clientSettingsSection = (System.Configuration.ClientSettingsSection)(ConfigurationManager.GetSection("userSettings/YourApplicationName.Properties.Settings"));
      var setting = clientSettingsSection.Settings.Get("yourParamName_DB_");
      string yourParamName_DB = ((setting.Value.ValueXml).LastChild).InnerText.ToString();
      

      【讨论】:

        【解决方案3】:

        如果您基于每个用户设置这些值,您可能需要使用 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel) 方法而不是您现在使用的当前方法。

        【讨论】:

          【解决方案4】:

          如果您知道配置文件的路径,请尝试:

          System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration("configPath");

          字符串 myValue = config.AppSettings.Settings[ "myValue" ].Value;

          【讨论】:

            【解决方案5】:

            您可以使用ConfigurationManager 类打开另一个可执行文件的配置文件。

            Configuration conf = ConfigurationManager.OpenExeConfiguration(exeFilePath);
            // edit configuration settings
            conf.Save();
            

            【讨论】:

              【解决方案6】:

              参见 ConfigurationManager.OpenExeConfiguration

              【讨论】:

                猜你喜欢
                • 2011-02-03
                • 2011-05-12
                • 2013-01-09
                • 2010-10-19
                • 1970-01-01
                • 1970-01-01
                • 2015-04-17
                • 2017-11-16
                相关资源
                最近更新 更多