读取编译后手动添加到app.config的设置

时间:2016-12-07 10:39:40

标签: c# .net app-config application-settings

我开发了一个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 ... 中静态提供。所以要实现我想要的我应该使用由我管理的设置文件,比如重新发明轮子吗?

1 个答案:

答案 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的名称。

希望这会有所帮助。当我无法使用或无法访问内置设置处理程序时,它已经为我工作了很多次。它确实为你的编码添加了更多的时间,但......

约翰