老话题,但这些链接非常有帮助:
http://www.iis.net/learn/develop/extending-iis-configuration/configuration-extensibility
http://www.iis.net/learn/develop/extending-iis-configuration/extending-iis-schema-and-accessing-the-custom-sections-using-mwa
编辑(05/25/2016):如何在applicationHost.config文件中存储自定义信息的详细信息......我希望这会有所帮助!
注意:这些设置在 IIS 管理器上不可见。有一种方法可以做到这一点,但这超出了本回复的范围。
要求:需要扩展 applicationHost.config文件的 system.applicationHost/sites 部分以允许站点级别的站点所有者属性。(IIS 默认情况下不允许我们这样做)。您也不能手动编辑applicationHost.config文件并添加自定义标签/属性。
脚步:
在 %windir%\system32\inetsrv\config\schema\ 下创建自定义架构 (xml) 文件。文件名:siteExtension_schema.xml
在该 xml 中包含您希望最终保存在 applicationHost.config 中的自定义元素,并使用适当的名称保存它。要记住的关键是 sectionSchema 标签。因此,在扩展现有部分的架构时,只需创建一个元素并将 name 属性设置为与现有部分相同。在架构文件(见下文)中,我们定义了一个名称为“system.applicationHost/sites” - 这与架构目录中默认 IIS_Schema.xml 文件中的 sectionSchema 名称相同。所以本质上你是在指示 IIS 添加这些
<!-- Contents of %windir%\system32\inetsrv\config\schema\siteExtension_schema.xml -->
<configSchema>
<sectionSchema name="system.applicationHost/sites">
<collection addElement="site">
<attribute name="owner" type="string" />
<attribute name="ownerEmail" type="string" />
</collection>
</sectionSchema>
</configSchema>
- 通过添加我们在上面步骤 2 中包含的“所有者”和“所有者电子邮件”属性的值来测试修改,然后检查配置文件 (applicationHost.config) 以查看更改。只需从命令行(使用 appcmd )运行以下命令(必须提升为管理员)即可:
C:\> %windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"
- 要查看是否应用了配置,请运行以下命令并检查输出:
C:\> %windir%\system32\inetsrv\appcmd list site "Default Web Site" /config
<system.applicationHost>
<sites>
...
<site name="Default Web Site" id="1" siteOwner="John Contoso" siteOwnerEmail="john@contoso.com">
...
...
</site>
</sites>
</system.applicationHost>
通过 C# 以编程方式读取和写入您的设置:
//this Will work with the ServerManager.OpenRemote("MyRemoteHostname") method also
using(var mgr = new ServerManager())
{
//Read
Console.WriteLine(mgr.Sites["Default Web Site"].Attributes["owner"].Value ); //Prints "John Contoso"
//Write
mgr.Sites["Default Web Site"].Attributes["owner"].Value = "New Owner";// Sets new value
mgr.CommitChanges(); // commits the changes to applicationHost.Config
}