4

我正在尝试在我的项目中使用 xml 配置文件。现在看起来像:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="replication" type="Project.Replication.ReplicationConfigSection, Project.Replication" />
    <section name="processing" type="Project.Processing.ProcessingConfigSection, Project.Processing" />
  </configSections>

  <replication>
    <streams>
      <stream name="STREAM_DATA_14360" />
    </streams>
  </replication>

  <processing dataStream="STREAM_DATA_14360" />

</configuration>

它工作正常,但我对其中的重复项感到困惑("STREAM_DATA_14360")。

你能提醒我,如何在 XML 中创建变量或数据重用的东西在应用程序配置中是可以接受的吗?

更新:

在现实生活中,我的配置有更多部分。有一个价值,它出现在本节的许多部分中:STREAM_DATA_14360. 所以我希望能够仅在配置文件的一个地方更改此值,并在其他地方使用对它的引用。

更改配置的速度 - 是它的第一个原因。

文件的大小是一秒钟,因为值可能很大:(STREAM_INFO_FUTURE_SESSION_CONTENTS_12421即第三方名称)

4

4 回答 4

1

XML 没有任何本机扩展宏或模板 - 任何情况都需要您执行预处理步骤或具有读取替换值所涉及的配置的代码。

如果这些不是经过编辑的名称,那么简单的搜索/替换似乎可以解决问题,而不必担心误报。

您可以将某些东西与T4 模板一起作为预处理器,这是否值得真的取决于您希望多久修改一次此文件。

也应该可以硬塞web.config 转换引擎来进行替换,但是您可能需要为XDT 引擎编写一些托管代码,具体取决于您的配置文件的设置方式。

于 2013-06-05T14:05:31.397 回答
1

您可以简单地添加此值<appSettings>并按照您的说法访问它。

您可以按以下方式执行此操作:

<appSettings>
  <add key="StreamName" value="STREAM_DATA_14360"/>
</appSettings>

在代码中,您可以按如下方式访问它:

 string streamName = ConfigurationManager.AppSettings["StreamName"];

确保System.Configuration在使用它之前添加对程序集的引用。

于 2013-06-05T14:39:35.103 回答
0

除了使用可能(或可能不会)方便您的生活的外部代码之外,您还可以定义自己的继承自 的类,在ConfigurationSection其中定义和封装您的键/值对并使用该ConfigurationProperty属性。

查看http://msdn.microsoft.com/en-us/library/2tw134k3.aspx以获取有关如何:使用 ConfigurationSection 创建自定义配置部分的更多信息。

编辑:您可以在 xsd 中进行引用(在此处查看

于 2013-06-05T13:15:03.753 回答
0

感谢您的回答。我同意 Mark 的观点,XML 中不支持变量或引用。但是,就我而言,有更简单的解决方案。我现在觉得很愚蠢,但希望它也能帮助另一个慢动作。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="global" type="Project.GlobalConfigSection, Project" />
    <section name="replication" type="Project.Replication.ReplicationConfigSection, Project.Replication" />
    <section name="processing" type="Project.Processing.ProcessingConfigSection, Project.Processing" />
  </configSections>

  <global>
    <streamNames>
      <streamName name="STREAM_DATA_14360" id="1"/>
    </streamNames>
  </global>

  <replication>
    <streams>
      <stream nameId="1" />
    </streams>
  </replication>

  <processing dataStreamId="1" />

</configuration>

结果:需要编辑代码以使用全局部分作为所有长名称的来源

优点:快速重命名,值的可重用性

于 2013-06-05T14:27:13.177 回答