我开发了一个Windows服务。它使用myService.exe.config文件进行配置,看起来像这样(仅使用一个设置,Prop1
简化):
<?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="MyNamespace.MyService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<MyNamespace.MyService.Properties.Settings>
<setting name="Prop1" serializeAs="String">
<value>Foo</value>
</setting>
</MyNamespace.MyService.Properties.Settings>
</applicationSettings>
</configuration>
当我部署到客户生产环境时,我需要在配置文件上手动添加更多设置,例如Prop2
:
<?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="MyNamespace.MyService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<MyNamespace.MyService.Properties.Settings>
<setting name="Prop1" serializeAs="String">
<value>Foo</value>
</setting>
<setting name="Prop2" serializeAs="String">
<value>Bar</value>
</setting>
</MyNamespace.MyService.Properties.Settings>
</applicationSettings>
</configuration>
现在,如果我启动了此类代码行:
log.Debug(Properties.Settings.Default["Prop1"].ToString());
log.Debug(Properties.Settings.Default["Prop2"].ToString());
产生以下输出:
Foo
Impossibile trovare la proprietà di impostazione 'Prop2'.
in System.Configuration.SettingsBase.GetPropertyValueByName(String propertyName)
in System.Configuration.SettingsBase.get_Item(String propertyName)
in System.Configuration.ApplicationSettingsBase.GetPropertyValue(String propertyName)
in System.Configuration.ApplicationSettingsBase.get_Item(String propertyName)
in ...
意大利语中的错误表示"无法找到设置属性'prop2'。
如何阅读编译时间后添加到app.config的设置?
我想知道,当应用程序已经部署时,是否不可能将新设置添加到app.config,因为必须在Properties.Settings.Default
中汇总每个设置并静态可用。因此,要实现我想要的我应该使用由我管理的设置文件,例如重新发明轮子?
好吧,我发布了一个想法,我以为会起作用,但回过头来测试了自己,但事实并非如此。d ***。
因此,这是我在常规设置不起作用时确实使用的建议。
创建一个构造为数据集的XML文件(最简单的方法是编写一个简短的程序来创建数据集,填充它并将其保存为XML。
DataSet mydataset = new DataSet("myDataSet");
DataTable mydatatable = new DataTable("myDataTable");
mydatatable.Columns.Add(new DataColumn("myColumn1"));
DataRow newrow = mydatatable.NewRow();
newrow["myColumn1"] = "somedata";
mydatatable.Rows.Add(newrow);
mydataset.Tables.Add(mydatatable);
mydataset.WriteXML(@"C:mydataset.xml", XmlWriteMode.WriteSchema);
这将创建您的基本XML文件。
非常重要!要序列化数据集和/或数据表,您必须在创建它们时给它们命名:
new DataSet("mydataset")
然后,只要您不违反XML结构的完整性,您可以随时使用自己喜欢的文本编辑器添加行(甚至列)XML文件。
在您的应用程序中,您只需将XML文件读回数据集中,然后通过数据表行迭代(如果您创建了多个)并进行相应处理。
。DataSet myDataSet = new DataSet("mydataset");
myDataSet.ReadXml(@"C:mydataset.xml")
foreach (DataTable t in myDataSet.Tables)
{
foreach (DataRow r in t.Rows)
{
//process here
}
}
非常重要!要处理数据,您必须使用数据集的名称,并从XML文件中使用数据。
希望这会有所帮助。当我无法使用或无法访问内置设置处理程序时,它已经为我工作了很多次。它确实为您的编码增加了更多时间,但是....
约翰