C#:库的Properties.Settings.Default.ConnectionString返回临时值

C#:库的Properties.Settings.Default.ConnectionString返回临时值,c#,visual-studio-2015,C#,Visual Studio 2015,我的解决方案中有一个DLL库配置,许多应用程序都调用这个库。此库需要到数据库的连接字符串。我不想在所有应用程序中存储连接字符串,而是想在DLL配置中存储一次连接字符串 作为一种解决方案,建议将其存储在DLL库配置的属性中。因此,我将其保存在那里,并使用以下功能读取它: public string ConnString() { return Properties.Settings.Default.ConnectionString; } 在调用应用程序中,我成功调用此函数: Dim d a

我的解决方案中有一个DLL库
配置
,许多应用程序都调用这个库。此库需要到数据库的连接字符串。我不想在所有应用程序中存储连接字符串,而是想在DLL
配置中存储一次连接字符串
作为一种解决方案,建议将其存储在DLL库
配置
的属性中。因此,我将其保存在那里,并使用以下功能读取它:

public string ConnString()
{
    return Properties.Settings.Default.ConnectionString;
}
在调用应用程序中,我成功调用此函数:

Dim d as new Configuration.ConfigurationRepository("")
msgbox(d.ConnString())
但是现在我想更改DLL中的值,从而更改
Configuration.DLL.config
中的值。但是当我运行应用程序时,它们会得到
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>

WerWerWerWer

如何从DLL中获取配置文件中更新的连接字符串
配置

由于DLL不能有配置文件,您需要“手动”从DLL的配置文件中读取设置

这意味着,如果已将名为yourdll.dll.config
app.config
文件添加到类库项目中,并且配置文件类似于以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="ConnectionString" value="verver"/>
  </appSettings>
</configuration>
现在,您可以从其他项目调用类库(假设已添加对类库的引用),并通过以下方式从其配置文件中读取值:

var config = new Config();
Console.WriteLine(config.GetConnectionString());

值得注意的是,您还需要将yourdll.dll.config文件的属性
Copy to Output Directory
设置为
Copy Always

,因为dll不能有配置文件,所以您需要“手动”从dll的配置文件中读取设置

这意味着,如果已将名为yourdll.dll.config
app.config
文件添加到类库项目中,并且配置文件类似于以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="ConnectionString" value="verver"/>
  </appSettings>
</configuration>
现在,您可以从其他项目调用类库(假设已添加对类库的引用),并通过以下方式从其配置文件中读取值:

var config = new Config();
Console.WriteLine(config.GetConnectionString());

值得注意的是,您还需要将yourdll.dll.config文件的属性
Copy to Output Directory
设置为
Copy Always

如何保存新值的代码?或者,解释如何“手动”设置此值?手工是重新启动应用程序还是在应用程序运行时进行设置?是在设置新值后调用
Save()
方法<代码>属性.Settings.Default.Save()DLL不能有配置文件,只能使用appname.exe.config文件。考虑创建自己的文本或XML文件,这些文件很容易在一个众所周知的位置找到。c:\programdata为数不多的实际用途之一。@blaze_125,Stefan,我正在手动操作:打开配置文件,更改值并保存它。然后重新启动应用程序。这是必需的过程,以便以后服务器管理员能够手动更改DLL库的连接字符串,并且在重新启动应用程序后,新的连接字符串应被称为保存新值的代码?或者,解释如何“手动”设置此值?手工是重新启动应用程序还是在应用程序运行时进行设置?是在设置新值后调用
Save()
方法<代码>属性.Settings.Default.Save()DLL不能有配置文件,只能使用appname.exe.config文件。考虑创建自己的文本或XML文件,这些文件很容易在一个众所周知的位置找到。c:\programdata为数不多的实际用途之一。@blaze_125,Stefan,我正在手动操作:打开配置文件,更改值并保存它。然后重新启动应用程序。这是必需的过程,以便稍后服务器管理员能够手动更改DLL库的连接字符串,并且在重新启动应用程序后,应调用新的连接字符串1<代码>var exeConfigPath=GetType().Assembly.Location将为您提供调用程序集的路径,而不是存储yourdll.dll.config的dll。2。这是我到目前为止一直使用的方法(除了dll配置文件的路径是通过环境变量读取的,或者是硬编码的)。但我的问题是如何通过
Properties.Settings.Default.
和使用库->属性->设置来完成,因为在这个线程()中,他们声称可以用它来完成。但在我看来,这是一个错误的说法<代码>var exeConfigPath=GetType().Assembly.Location将为您提供调用程序集的路径,而不是存储yourdll.dll.config的dll。2。这是我到目前为止一直使用的方法(除了dll配置文件的路径是通过环境变量读取的,或者是硬编码的)。但我的问题是如何通过
Properties.Settings.Default.
和使用库->属性->设置来完成,因为在这个线程()中,他们声称可以用它来完成。但在我看来,这是一个错误的说法。