0

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

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

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

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

还是我需要编写一个模块来使用该设置?目前我没有任何内容,只有配置中的文本。

4

2 回答 2

0

以下链接将帮助您理解这一点。

http://www.codeproject.com/Articles/32628/ASP-NET-Custom-Web-Configuration-Section

http://www.4guysfromrolla.com/articles/032807-1.aspx

问候,

于 2013-07-11T13:12:08.497 回答
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

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

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

要求:需要扩展 applicationHost.config文件的 system.applicationHost/sites 部分以允许站点级别的站点所有者属性(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 添加这些

<!-- 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:\> %windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"

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

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
    }
    
于 2016-05-25T05:06:45.010 回答