我想使用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
部分?
答案 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
添加到课程中。