【问题标题】:Adding custom section to web.config in ASP.NET 4在 ASP.NET 4 中将自定义部分添加到 web.config
【发布时间】:2013-07-11 12:05:17
【问题描述】:

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

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

<?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

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

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

【问题讨论】:

    标签: asp.net iis iis-7.5


    【解决方案1】:

    【讨论】:

    • 感谢您的回答。我不清楚,将架构定义添加到 applicationHost.config 的方法是旧的,对于 .NET 4 应用程序来说还不够吗?
    • 那么你想要什么样的功能呢?
    【解决方案2】:

    老话题,但这些链接非常有帮助:

    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 标记。因此,在扩展现有部分的架构时,只需创建一个元素并将名称属性设置为与现有部分相同。在架构文件(见下文)中,我们定义了一个名称为“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>
    1. 通过添加我们在上面步骤 2 中包含的“所有者”和“所有者电子邮件”属性的值来测试修改,然后检查配置文件 (applicationHost.config) 以查看更改。只需从命令行(使用 appcmd )运行以下命令(必须提升为管理员)即可:

    C:\&gt; %windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"

    1. 要查看是否应用了配置,请运行以下命令并检查输出:

    C:\&gt; %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
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多