自定义.config文件中出现未识别的属性'xmlns'

5

我创建了一个自定义的System.Configuration.ConfigurationSection,并将其放在一个单独的配置文件中,通过'configSource="MyCustomConfigFile.config"'将其包含到我的Web.config中。

我还为自定义配置文件创建了一个.xsd模式,添加了一些好处,例如模式验证/智能感知 - 这很有效。

当尝试启动应用程序(托管在IIS8,.NET 4.5.1中)时,出现以下错误:

配置错误 描述:处理服务此请求所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改您的配置文件。

解析器错误消息:未识别属性“xmlns”。请注意,属性名称区分大小写。

源错误:

行1: <?xml version="1.0" encoding="utf-8" ?>

行2: <identityServer xmlns="http://myCustomNamespace.xsd">

老实说,我很惊讶 - 有人可以告诉我如何修复它而不删除xmlns,以便保留模式验证/智能感知吗?

2个回答

12

根据这里发现,解析器无法反序列化配置节,因为该配置节不知道'xmlns'属性的存在 - 这实际上是完全合理的。

为了解决这个问题,您可以在C#中的自定义配置部分中添加以下内容:

    public class MyCustomConfigurationSection
    {
private const string XmlNamespaceConfigurationPropertyName = "xmlns";
    [ConfigurationProperty(XmlNamespaceConfigurationPropertyName, IsRequired = false)]
            public string XmlNamespace
            {
                get
                {
                    return (string)this[XmlNamespaceConfigurationPropertyName];
                }
                set
                {
                    this[XmlNamespaceConfigurationPropertyName] = value;
                }
            }
    }

这完全解决了问题。


如果您想指定 xsd 模式的位置,还应添加“xmlns:xsi”和“xsi:schemaLocation”的属性。 - Rail
请您能详细说明一下吗? - Maciek
这是你找到的唯一解决此问题的方法吗?我的意思是,这个方法可以正常工作,但似乎应该有更简单的方法! - crush
1
那是我所知道的唯一方法。 - Maciek
这个写得很好的答案似乎基于使用适当的 asp.net 机制以稳健的方式扩展 web.config。仅是我的意见 - 我正在尝试在我正在重启的一个传统项目上解决这个问题 - 它有一个正在利用 web.config 的配置方面的第三方包。 - qxotk

0

@Peter Evans - 我看到你想要提供帮助,这是正确的想法。如果你正在提出可能有助于该人的建议,并且这些建议不是实际解决方案的明确定义步骤,那么你可以将它们作为评论发布到原始问题中 - 在那里,有问题的人可以确认/否认你的建议是否有用。将这些评论发布到问题中有助于澄清情况,并且不太可能使你受到负面评价。希望这对你有所帮助。 - qxotk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接