我在项目的设置文件中配置了一个布尔变量 当我编译时,在我的输出文件夹中,我看到.dll.config中的变量,如下所示:
<setting name="ShowStats" serializeAs="String">
<value>True</value>
</setting>
在代码中我通过Properties.Settings.Default.ShowStats
引用它
我希望能够更改我的.config文件并写入False
或True
,并将此值反映在运行时中。
似乎只在Visual Studio的“设置”窗口中更改它才能在运行时运行。
用记事本改变是行不通的。它将始终是VS设置窗口中设置的最后一个值。
我在这里做错了什么?
答案 0 :(得分:5)
Dll实际上没有配置文件。只有输入过程有一个配置文件。基本上:您的条目需要从dll命名的配置文件复制到app.config或exe命名的配置文件。
此外:这些值仅在启动时读取;如果你在运行时更改它,那就不会做任何事情(除非进程选择通过监视配置来重启自己 - asp.net会这样做)。
答案 1 :(得分:1)
.config
文件在运行时由ConfigurationManager
在启动时读取一次。此外,如果您为应用程序使用主app.config
,则需要在dll.config
的正确部分标题下实际添加单个app.config
值,以便应用程序在运行时。
在运行时更改文件仍然无效,除非您使用手动编写的代码(FileSystemWatcher
等)编写应用程序。只更改ASP.NET web.config
文件会导致运行时应用程序重新启动,因为它是ASP.NET运行时的一项功能。
答案 2 :(得分:1)
DLL不能有配置文件。虽然它们将由Visual Studio创建,但它们不会在运行时读取。您需要将DLL配置合并到应用程序的配置中。
如果不合并配置,设置将保留其默认值。我在这里已经回答了如何做到这一点:How do I make App.config values visible for referenced ClassLibraires (Assebmlies)(但是,在这种情况下,这不是公认的答案)
请注意:+1代表Settings.Default...
代替ConfigurationManager
访问设置。
将我的答案中的配置合并到上面链接的问题的示例:让我们假设您的DLL的app.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="DLLSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="DLLSample.Properties.Settings.MyConnectionString" connectionString="Data Source=..." providerName="System.Data.SqlClient" />
</connectionStrings>
<applicationSettings>
<DLLSample.Properties.Settings>
<setting name="AllowStart" serializeAs="String">
<value>True</value>
</setting>
</DLLSample.Properties.Settings>
</applicationSettings>
</configuration>
您的应用程序的app.config
如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="App.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<App.Properties.Settings>
<setting name="LogPath" serializeAs="String">
<value>C:\Temp</value>
</setting>
</App.Properties.Settings>
</applicationSettings>
</configuration>
完成上述更改后,应用程序的配置文件应如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="App.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="DLLSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="DLLSample.Properties.Settings.MyConnectionString" connectionString="Data Source=..." providerName="System.Data.SqlClient" />
</connectionStrings>
<applicationSettings>
<App.Properties.Settings>
<setting name="LogPath" serializeAs="String">
<value>C:\Temp</value>
</setting>
</App.Properties.Settings>
<DLLSample.Properties.Settings>
<setting name="AllowStart" serializeAs="String">
<value>True</value>
</setting>
</DLLSample.Properties.Settings>
</applicationSettings>
</configuration>
从您的应用程序和DLL代码中,您将能够使用常规配置设置机制,例如通过DLL代码中的Properties.Settings.Default.AllowStart
访问值或从应用程序代码访问Properties.Settings.Default.LogPath
强>
你不能做的两件事:
app.config
以添加/删除/修改设置。