可以使用IIS 7配置编辑器配置自定义applicationSettings部分吗?

时间:2011-09-16 10:15:15

标签: iis-7 configuration web-config application-settings custom-configuration

我想使用IIS 7配置编辑器编辑特定于应用程序的设置。这些设置存储在applicationSettings部分中,当使用Visual Studio向项目添加设置时,该部分会自动添加。我的部分看起来像这样:

<applicationSettings>
    <My.Custom.Properties.Settings>
      <setting name="SomePath" serializeAs="String">
        <value>D:\Folder\SubFolder</value>
      </setting>
    </My.Custom.Properties.Settings>
</applicationSettings>

因此,按照here的说明进行操作,经过大量试验和错误后,我可以将该部分加载到IIS编辑器中。我可以在setting元素上看到(并编辑)属性。我也可以看到value元素,但是里面的文件夹路径没有被加载而且无法编辑,这就是我需要的!我添加到IIS的架构如下所示:

<configSchema>
     <sectionSchema name="applicationSettings/My.Custom.Properties.Settings">
       <collection addElement="setting">
         <attribute name="name" type="string"></attribute>
         <attribute name="serializeAs" type="string"></attribute>
         <element name="value"></element>
       </collection>
     </sectionSchema>
</configSchema>

是否有人成功地做了我正在尝试做的事情,或者,有没有办法绕过这个不涉及回到旧的appSettings部分?

1 个答案:

答案 0 :(得分:2)

找不到其他选择,我选择更改applicationSettings部分的模式,以便将setting元素的值存储为元素的属性,而不是其中的另一个元素,这是IIS编辑器喜欢的。所以,我的设置现在看起来像这样:

<setting name="SomePath" serializeAs="String" value="D:\Folder\SubFolder">
</setting>

这当然意味着实现我自己的设置提供程序(请参阅“自定义设置提供程序”here),以便我可以从新属性中读取。 这不是太难,如果你继承.NET附带的LocalFileSettingsProvider,那就更不了。此外,如果您不打算在运行时更改设置,则只需实现GetPropertyValues方法。

这种方法的缺点是它使Visual Studio的设计时支持变得复杂,因为设置设计器无法识别新模式,我发现无法告诉它使用定制提供商。好消息是设计人员会在给出错误后加载,因此您仍然可以使用它来定义设置。但是,它会在您保存时使用默认架构覆盖您的配置文件。我的解决方案是创建一个在Visual Studio的prebuild事件上运行的JScript,它将修改Visual Studio更改的设置以符合我的架构。在编写脚本时,This页面非常有用。

实施自定义提供程序的提示:

  • 我使用AppDomainSetup.ConfigurationFile属性来访问我的配置文件。
  • 加载设置时,只需设置SettingsPropertyValue.SerializedValue属性,框架就会为您反序列化实际值。
  • 要使应用程序在运行时中使用提供程序,请单击设计器上的单个设置,然后在“属性”窗格中,在“提供程序”字段中输入提供程序的类名称。要为通过设计人员输入的所有设置指定提供者,请点击查看代码按钮,然后将SettingsProviderAttribute添加到课程中。