在运行时修改类库配置

时间:2018-09-12 12:05:12

标签: c#

通常对于我们的应用程序,我们将在需要时修改外部配置文件(即更新连接字符串),以避免必须重建整个解决方案。在这种情况下,我们从主可执行文件中调用类库,但是类库中的用户设置有问题。

似乎是从我们的主要可执行文件中调用该库时,用户设置被烘焙/硬编码到该库中,即修改配置文件无效。

我为解决方法提供了以下测试解决方案,该解决方案似乎允许我们修改和调用类库的配置文件,但它不是很漂亮。

  • 我想知道是否有更好的方法?
  • 我们是否只需将需要运行时修改的所有设置移至主要可执行文件的配置?
  • 此行为背后是否存在阻止修改我们应该牢记的类库配置的原因?

public MyClassLibrary()
{
    Configuration config = null;
    string exeConfigPath = this.GetType().Assembly.Location;
    try
    {
        config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

    if (config != null)
    {
        // change userSettings / applicationSettings if setting scope is user/application
        string myValue = GetAppSetting(config, "userSettings", "MyClassLib.Properties.Settings1", "test");
        Console.WriteLine(myValue);
    }

}

string GetAppSetting(Configuration config, string sectionGroup, string settingsFullName, string key)
{
    try
    {
        SettingElement element = ((ClientSettingsSection)config
            .SectionGroups[sectionGroup]
            .Sections[settingsFullName]).Settings.Get(key);

        if (element != null)
        {
            string value = element.Value.ValueXml.InnerText;
            if (!string.IsNullOrEmpty(value))
                return value;
        }
    }
    catch (NullReferenceException e)
    {
        return Settings1.Default[key].ToString();
    }

    return string.Empty;
}

0 个答案:

没有答案