在ASP.NET 4中向web.config添加自定义部分

时间:2013-07-11 12:05:17

标签: asp.net iis iis-7.5

我花了半天的时间试图理解为什么以下失败。

我可以在任何地方添加部分,但从来没有让它像那样工作():

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>

       <mysection />

       <system.web>
       <compilation debug="false" batch="false" targetFramework="4.0" />
       </system.web>
       <system.webServer>
         <handlers>
         </handlers>
       </system.webServer>
  </configuration>

我认为该错误与.NET 4有关,因为当您在applicationHost.config中放置没有预配置的部分时,它会显示带有灰色边框的错误,说明配置不正确。这就是我的期望。然后我添加了部分定义,一切似乎都工作我可以从控制台编辑配置 - 这意味着它现在正确解析。

但是当我尝试联系应用程序时,它会给出:

分析器错误消息:无法识别的配置部分mysection

在黄色背景上有一段配置。

或者我是否需要编写模块来使用该设置?目前我没有,只有配置中的文字。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

旧主题,但这些链接非常有用:

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

编辑(2016年5月25日): 有关如何在 applicationHost.config 文件中存储自定义信息的详细信息...我希望这会有所帮助!

注意:这些设置在IIS管理器上不可见。有一种方法可以做到这一点,但这超出了这种反应的范围。

要求: 需要扩展 applicationHost.config 文件的system.applicationHost / sites部分,以允许站点级别的 siteowner 属性。 (IIS默认情况下不允许我们这样做)。您也无法手动编辑 applicationHost.config 文件并添加自定义标记/属性。

步骤:

  1. 在%windir%\ system32 \ inetsrv \ config \ schema \下创建自定义架构(xml)文件。文件名:siteExtension_schema.xml

  2. 将最终要保存的自定义元素包含在该xml的applicationHost.config中,并使用适当的名称进行保存。要记住的关键是sectionSchema标记。因此,在扩展现有部分的模式时,只需创建一个元素并将name属性设置为与现有部分相同。在模式文件(见下文)中,我们定义了一个名为“system.applicationHost / sites”的文件 - 这与模式目录中默认IIS_Schema.xml文件中的sectionSchema名称相同。所以从本质上讲,你指示IIS添加这些

  3. <!-- 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>

    1. 通过添加上面步骤2中包含的“owner”和“ownerEmail”属性的值来测试修改,然后检查配置文件(applicationHost.config)以查看更改。只需从命令行运行以下命令(必须以管理员身份提升)(使用appcmd):
    2. C:\> %windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"

      1. 要查看是否已应用配置,请运行以下命令并检查输出:
      2. 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> 

        1. 通过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
          }