我的解决方案中有一个DLL库Configuration
,许多应用程序都将该库调用。该库需要与数据库的连接字符串。与其将连接字符串存储在所有应用程序中,我希望将其一次存储在DLL Configuration
中。
作为一种解决方案,建议将其存储在DLL库Configuration
的属性中。因此,我将其保存在那里并使用以下功能进行阅读:
public string ConnString()
{
return Properties.Settings.Default.ConnectionString;
}
在调用应用程序中,我成功调用了此函数:
Dim d as new Configuration.ConfigurationRepository("")
msgbox(d.ConnString())
但是现在我想更改DLL中的值,从而更改Configuration.dll.config
中的值。但是,当我运行应用程序时,它们将获得旧值Configuration
,并且不会更新以获取已手动设置的新值。就像我进入项目Configuration
并转到“属性”一样,我得到一个消息框,该值已更改,并且我想更新。然后,即使现在我同意更新并再次运行应用程序,我也会获得更新的值。
Configuration.dll.config
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Configuration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup><applicationSettings>
<Configuration.Properties.Settings>
<setting name="ConnectionString" serializeAs="String">
<value>werwrwerwre</value>
</setting>
</Configuration.Properties.Settings>
</applicationSettings>
</configuration>
如何从DLL Configuration
获取配置文件中更新的连接字符串?
答案 0 :(得分:1)
由于DLL无法包含配置文件,因此您需要“手动”读取dll配置文件中的设置。
这意味着,如果您已将名称为 yourdll.dll.config 的app.config
文件添加到类库项目中,则该配置文件看起来类似于这个:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString" value="verver"/>
</appSettings>
</configuration>
然后,您需要您的类库以类似于以下方式读取配置文件中的值:
public class Config
{
public string GetConnectionString()
{
Configuration config = null;
var exeConfigPath = GetType().Assembly.Location;
try
{
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception ex)
{
//Error handling
}
if (config == null) return string.Empty;
var myValue = GetAppSetting(config, "ConnectionString");
return myValue;
}
private string GetAppSetting(Configuration config, string key)
{
var element = config.AppSettings.Settings[key];
if (element == null) return string.Empty;
var value = element.Value;
return !string.IsNullOrEmpty(value) ? value : string.Empty;
}
}
现在,您可以从其他项目中调用类库(假设您已添加对类库的引用),并以这种方式从其配置文件中读取值:
var config = new Config();
Console.WriteLine(config.GetConnectionString());
值得注意的是,您还需要将 yourdll.dll.config 文件的属性Copy to Output Directory
设置为Copy Always