[英]reading and writing app.config in C#
I understand there are lot of references to app.config
in this forum, but I am posting this question here as I think my question is very direct. 我知道在这个论坛中有很多对
app.config
的引用,但我在这里发布这个问题,因为我认为我的问题非常直接。
My app.config
looks like this... 我的
app.config
看起来像这样......
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MySection.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MySection.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.0"/>
</startup>
<userSettings>
<MySection.Properties.Settings>
<setting name="DEVICE_ID_VERSION" serializeAs="String">
<value>1.0.0.0</value>
</setting>
<setting name="DEVICE_ID_ID" serializeAs="String">
<value>0000 0001</value>
</setting>
</MySection.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="PInvoke" publicKeyToken="83380E73B2486719" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.19.0" newVersion="3.0.19.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Utilities" publicKeyToken="83380E73B2486719" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.18.0" newVersion="3.0.18.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<applicationSettings>
<MySection.Properties.Settings>
<setting name="CurrentLogFile" serializeAs="String">
<value>1</value>
</setting>
</MySection.Properties.Settings>
</applicationSettings>
</configuration>
I have added the new CurrentLogFile
key from the Settings.Settings
designer page as an Application
key. 我已经从
Settings.Settings
设计器页面添加了新的CurrentLogFile
键作为Application
键。 I need to read this on application startup and write to it when there is a change in the logfile number at runtime. 我需要在应用程序启动时阅读此内容,并在运行时日志文件编号发生更改时写入。
The following code that I wrote is unable to re-write the Setting
key. 我写的以下代码无法重写
Setting
键。 It creates an entirely new entry in the config file: 它在配置文件中创建了一个全新的条目:
int curLogFile = Settings.Default.CurrentLogFile;
curLogFile = curLogFile +1;
// Update the new log file number to the config "CurrentLogFile" key
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
bool bReadOnly = config.AppSettings.Settings.IsReadOnly();
config.AppSettings.Settings.Remove("CurrentLogFile");
config.AppSettings.Settings.Add("CurrentLogFile", curLogFile.ToString());
// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified);
// Force a reload of a changed section.
ConfigurationManager.RefreshSection("appSettings");
Settings.Default.Reload();
The new CurrentLogFile
is created at the top of the config file just after the </configSections>
closing tag, as shown below: 新的
CurrentLogFile
在</configSections>
结束标记之后的配置文件顶部创建,如下所示:
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MySection.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MySection.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
**<appSettings>
<add key="CurrentLogFile" value="2" />
</appSettings>**
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<userSettings>
<MySection.Properties.Settings>
<setting name="DEVICE_ID_VERSION" serializeAs="String">
<value>1.0.0.0</value>
</setting>
</MySection.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Utilities" publicKeyToken="83380E73B2486719" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.18.0" newVersion="3.0.18.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<applicationSettings>
<MySection.Properties.Settings>
**<setting name="CurrentLogFile" serializeAs="String">
<value>1</value>
</setting>**
</MySection.Properties.Settings>
</applicationSettings>
</configuration>
This creates duplicate entries of the CurrentLogFile
key (both highlighted with **
, the new one at the top). 这将创建
CurrentLogFile
键的重复条目(两者都用**
突出显示,顶部用新的突出显示)。
Am I using the wrong function for key writing? 我是否使用错误的功能进行密钥写入?
Your code allows access only to the <appSettings>
section in <add key="CurrentLogFile" value="2" />
format. 您的代码只允许访问
<add key="CurrentLogFile" value="2" />
格式的<appSettings>
部分。 For read/write <userSettings>
and <applicationSettings>
you should use standard Settings.settings file, that will do the entries in the following format <setting name="CurrentLogFile" serializeAs="String"> <value>1</value> </setting>
The variable name used in the project will be string readonly YourNamespace.Properties.Settings.Default.CurrentLogFile
, because you put it in application scope. 对于读/写
<userSettings>
和<applicationSettings>
您应该使用标准的Settings.settings文件,它将执行以下格式的条目<setting name="CurrentLogFile" serializeAs="String"> <value>1</value> </setting>
项目中使用的变量名称将是string readonly YourNamespace.Properties.Settings.Default.CurrentLogFile
,因为您将它放在应用程序范围内。 User scope allows rewriting: 用户范围允许重写:
<userSettings>
<MySection.Properties.Settings>
<setting name="DEVICE_ID_VERSION" serializeAs="String">
<value>1.0.0.0</value>
</setting>
</MySection.Properties.Settings>
</userSettings>
MySection.Properties.Settings.Default.DEVICE_ID_VERSION = "1.5.0.0";
MySection.Properties.Settings.Default.Save();
您可以对此Config文件使用XML读取和写入方法,因为app.config和XML的基本体系结构是相同的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.