通常对于我们的应用程序,我们将在需要时修改外部配置文件(即更新连接字符串),以避免必须重建整个解决方案。在这种情况下,我们从主可执行文件中调用类库,但是类库中的用户设置有问题。
似乎是从我们的主要可执行文件中调用该库时,用户设置被烘焙/硬编码到该库中,即修改配置文件无效。
我为解决方法提供了以下测试解决方案,该解决方案似乎允许我们修改和调用类库的配置文件,但它不是很漂亮。
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;
}