Visual Studio始终为App.config选择错误的xsd

Visual Studio always selects the wrong xsd for App.config

首先,我有一个具有此配置的.NET 4.0应用程序:

1
2
3
4
5
6
<?xml version="1.0"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

在转换为Visual Studio 2010/.NET 4.0之后,我遇到了与此问题中相同的问题:app.config"找不到架构信息":编辑器无法识别supportedRuntime元素,从而导致提示。

然后我按照答案:我在app.config编辑器中,然后转到属性窗口。在那里我选择了模式条目。

我删除了dotnetconfig.xsd的选择并选择了dotnetconfig35.xsd,但是vs总是自动地再次添加dotnetconfig.xsd。即使我明确地将其设置为"不要使用此模式",或者甚至从列表中删除该模式,它也会自动再次添加到列表中并被选中。

因为我现在选择了两个模式来定义相同的元素,所以我收到了很多警告。

如何更改架构以使用dotnetconfig35.xsd,而不再自动添加dotnetconfig.xsd?


我将这个问题解释为:文件DotNetConfig.xsd元素的定义错误(或不完整)。所有DotNetConfig.xsdDotNetConfig35.xsdDotNetConfig30.xsdDotNetConfig20.xsd文件的第230行包含

1
<xs:element name="startup" vs:help="configuration/startup" />

另一方面,Microsoft将启动设置架构描述为非空元素。因此,我建议将DotNetConfig.xsdDotNetConfigXX.xsd文件中的上述行从%ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas目录(或64位系统上的%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemas目录)替换为以下行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<xs:element name="startup" vs:help="configuration/startup">
    <xs:complexType>
        <xs:choice minOccurs="1" maxOccurs="1">
            <xs:element name="requiredRuntime" vs:help="configuration/startup/requiredRuntime">
                <xs:complexType>
                    <xs:attribute name="version" type="xs:string" use="optional" />
                    <xs:attribute name="safemode" type="xs:boolean" use="optional" />
                </xs:complexType>
            </xs:element>
            <xs:element name="supportedRuntime" minOccurs="1" maxOccurs="unbounded" vs:help="configuration/startup/supportedRuntime">
                <xs:complexType>
                    <xs:attribute name="version" type="xs:string" use="optional" />
                    <xs:attribute name="sku" type="xs:string" use="optional" />
                </xs:complexType>
            </xs:element>
        </xs:choice>
        <xs:attribute name="useLegacyV2RuntimeActivationPolicy" type="xs:boolean" use="optional" />
        <!-- see http://msdn.microsoft.com/en-us/library/bbx34a2h.aspx -->
    </xs:complexType>
</xs:element>

在修改和重新启动Visual Studio 2010之后,您将不会看到您所描述的警告。当然,我们可以定义更详细的所有属性或元素的模式(特别是如果我们找到更详细的部分文档),但我只想描述问题的原因和解决问题的方法。

通过在DotNetConfig.xsdDotNetConfig35.xsd和其他DotNetConfigXX.xsd文件之间的选择,将根据同一目录中catalog.xml文件的内容来完成,该模式在这里描述。catalog.xml文件的标准版本包含以下行

2

因此,所有扩展名为.config的文件都将由Visual Studio解释为具有上述文件中描述的XSD模式的文件。


当我遇到这个问题时,取消检查架构的原因是打开了多个Visual Studio实例。

(我在一个项目中打开了VS2015,在另一个项目中也同时打开了VS2013。)

注意,Visual Studio的多个版本以及在同一个项目/解决方案上来回切换似乎也是重复模式的一些问题首先出现的原因。


这是一篇老文章,但我也遇到了同样的问题。

我采用的方法与KenJohnsrude上面建议的方法相同——创建一个新的.xsd文件:

http://w3stack.org/question/c-how-to-fix-error-could-not-find-schema-information-for-the-attributelement-by-creating-schema/

  • msvs>打开项目app.config

  • XML>创建架构

    这将在%temp%中创建"app.xsd"

    1
     EXAMPLE: c:\users\paulsm\AppData\Local\Temp\app.xsd
  • 将app.xsd移动到项目目录

  • app.config,右键单击>属性>模式>…app.xsd>使用>使用此模式=是