我开发了一个Windows服务。它使用MyService.exe.config文件进行配置,如下所示(仅使用一个设置进行简化,seq_embeddings = tf.nn.embedding_lookup(embedding_map, self.input_seqs)
):
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());
意大利语中的错误表示&#34;无法找到设置属性&#39; Prop2&#39;&#34;。
如何在编译时读取添加到app.config的设置?
我想知道在部署应用程序时是否无法向app.config添加新设置,因为必须编译每个设置并在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 ...
中静态提供。所以要实现我想要的我应该使用由我管理的设置文件,比如重新发明轮子吗?
答案 0 :(得分:-1)
好吧,我发布了一个我认为可行的想法,但回过头来测试自己并没有。 d ***。
所以这是我在常规设置内容不起作用时使用的建议。
创建一个结构化为DataSet的XML文件(最简单的方法是编写一个简短的程序,创建一个DatSet,填充它,并将其保存为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文件。
非常重要!!!!!要序列化DataSet和/或DataTable,您必须在创建它们时为它们命名:
new DataSet("mydataset")
然后,只要您不违反XML结构的完整性,就可以随时使用您喜欢的文本编辑器向您的XML文件添加行(甚至列)。
在您的应用程序中,您只需将XML文件读回DataSet并遍历DataTable行(如果您创建了多个DataTable,则遍历每个DataTable)并相应地进行处理。
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文件中的DataSet和DataTable的名称。
希望这会有所帮助。当我无法使用或无法访问内置设置处理程序时,它已经为我工作了很多次。它确实为你的编码添加了更多的时间,但......
约翰