2

我想使用 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>

因此,按照此处的指示,经过大量试验和错误,我能够将该部分加载到 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部分?

4

1 回答 1

2

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

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

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

这种方法的缺点是它使Visual Studio 的设计时支持复杂化,因为设置设计器无法识别新架构,而且我发现没有办法告诉它使用自定义提供程序。好消息是设计器会在给你一个错误后加载,所以你仍然可以使用它来定义设置。但是,它会在您保存时使用默认架构覆盖您的配置文件。我对此的解决方案是创建一段在 Visual Studio 的预构建事件上运行的 JScript,它将修改由 Visual Studio 更改的设置以符合我的架构。页面在编写脚本时非常有用。

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

  • 我使用该AppDomainSetup.ConfigurationFile属性来访问我的配置文件。
  • 加载设置时,只需设置SettingsPropertyValue.SerializedValue属性,框架将为您反序列化实际值。
  • 要使应用程序在运行时使用提供程序,请单击设计器上的单个设置,然后在“属性”窗格的“提供程序”字段中输入提供程序的类名。要为通过设计器输入的所有设置指定提供程序,请单击“查看代码”按钮并将其添加SettingsProviderAttribute到类中。
于 2011-09-21T07:25:03.270 回答