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



我开发了一个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文件中使用数据。

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

约翰

最新更新