我正在尝试在我的项目中使用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
(即第三方名称)
答案 0 :(得分:1)
XML没有任何本机扩展宏或模板 - 任何场景都需要您执行预处理步骤或者使用代码替换值来读取配置。
如果这些不是编辑名称,似乎一个简单的搜索/替换可以解决问题,而不会对误报有太多担忧。
您可以将T4 templates与web.config transformation放在一起作为预处理器,这是否值得,实际上取决于您希望修改此文件的频率。
还应该可以将XDT engine引擎转换为替换,但您可能必须为{{3}}编写一些托管代码,具体取决于您的配置文件的设置方式。
答案 1 :(得分:1)
您只需在<appSettings>
中添加此值,然后按照您的说法访问它。
您可以按照以下方式执行此操作:
<appSettings>
<add key="StreamName" value="STREAM_DATA_14360"/>
</appSettings>
在代码中,您可以按如下方式访问它:
string streamName = ConfigurationManager.AppSettings["StreamName"];
确保在使用之前添加对System.Configuration
程序集的引用。
答案 2 :(得分:0)
除了使用可能(或可能不会)促进生活的外部代码之外,您还可以定义自己继承自ConfigurationSection
的类,其中您定义并封装键/值对并使用{{1属性。
有关如何:使用ConfigurationSection 创建自定义配置文件的详细信息,请查看http://msdn.microsoft.com/en-us/library/2tw134k3.aspx。
编辑:您可以在xsd中进行引用(检查here)
答案 3 :(得分: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>
结果:需要编辑代码以使用全局部分作为所有长名称的来源
优势:快速重命名,值可重用