C#应用程序设置中的可选字段

本文关键字:字段 应用程序 设置 | 更新日期: 2023-09-27 18:01:11

有没有办法在应用程序设置中创建一些可选字段。例如,对于一个客户端,我们需要在设置文件中进行一些基于客户端的设置,如下所示:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <userSettings>
      <setting name="Client_1_out_folder" serializeAs="String">
        <value>c:'</value>
      </setting>
      <setting name="Some_other_setting" serializeAs="String">
        <value>True</value>
      </setting>
      ...

对于另一个客户端,我们根本不需要Client_1_out_folder,所以为了保持配置文件的干净,最好将其一起从配置文件中删除。因此,对于客户端2,配置文件的这一部分看起来像:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <userSettings>
      <setting name="Some_other_setting" serializeAs="String">
        <value>True</value>
      </setting>
      ...

C#应用程序设置中的可选字段

为您的设置创建一个custon配置部分。然后在configurationsection类上,将该属性标记为"IsRequired=false"以使该属性可选。

[ConfigurationProperty("frontPagePostCount"
    , DefaultValue = 20
    , IsRequired = false)]

您可以创建一个继承自ConfigurationSection的类。

然后,你几乎可以做任何你想做的事。它比用户设置强大得多。

MSDN:如何:使用ConfigurationSection 创建自定义配置节

您可以扩展ASP.NET配置使用XML配置的设置您自己的元素。要做到这一点,你创建自定义配置部分处理程序。处理程序必须是.NET继承自System.Configuration.Configuration节班节处理程序解释并处理以下设置在XML配置元素中定义在Web.config的特定部分中文件你可以读写这些通过处理程序的属性。

这篇文章说"ASP.NET",但它不仅仅适用于ASP.NET。它同样适用于WinForms。

我建议您使用配置节设计器创建自己的配置节。

不幸的是,此工具与VS2010不兼容,但它非常有帮助,因此我一直使用VS2008来使用它。无论哪种方式,您都可以为配置节处理程序创建一个额外的程序集,以便仅对此程序集使用VS2008,并使用VS2010构建解决方案的其余部分。所以这并不是一个很大的缺点。

还有一个关于创建自定义配置部分的好示例。

我希望它能帮助你。。。

应用程序配置和自定义配置部分

将这些常用设置放在.config文件中,并在一个特殊的配置文件中引用。

<!-- in general.config -->
<appSettings>
  <add key="common1" value="something"/>
  <add key="common2" value="something else"/>
</appSettings>
<!-- in client1.config -->
<appSettings file="general.config" >
  <add key="specialKey1" value="for client 1 only"/>
</appSettings>
<!-- in client2.config -->
<appSettings file="general.config" >
  <add key="specialKey2" value="for client 2 only"/>
</appSettings>

使用自定义配置部分是个好主意,然后可以为所需的条目进行编码。这是处理这个问题的好方法。

但是,您也可以通过一个类来处理这个问题,该类获取这些细节,并测试这些细节的存在性(或其他方面(,将它们都保留在usersettings部分中。因此,您的主代码将访问类中的设置:

if(Settings.HasClient)
    //use Settings.Client;
Process(Settings.OtherSetting);

取决于您需要如何使用它们。在Settings Constructor中,您可以直接访问设置。

我怀疑你的问题遗漏了什么。

如果客户端2不需要"client_1_out_folder"设置,并且在运行时没有尝试检索它,那么您应该可以简单地将其删除,而无需进行任何其他更改。

你试过这样做吗?