Visual Studio 总是为 App.config 选择错误的 xsd

Posted

技术标签:

【中文标题】Visual Studio 总是为 App.config 选择错误的 xsd【英文标题】:Visual Studio always selects the wrong xsd for App.config 【发布时间】:2011-05-20 07:25:26 【问题描述】:

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

<?xml version="1.0"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

我遇到了与此问题中的问题相同的问题:app.config "Could not find schema information" after converting to Visual Studio 2010 / .Net 4.0 : supportedRuntime 元素未被编辑器识别,导致提示。

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

我删除了DotNetConfig.xsd的选择,而是选择了DotNetConfig35.xsd,但是VS总是自动再次添加DotNetConfig.xsd。即使我将其明确设置为“不使用此架构”甚至 remove 从列表中的架构 - 它也会自动再次添加到列表中并被选中。

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

如何更改架构以使用 DotNetConfig35.xsd 而不会再次自动添加 DotNetConfig.xsd?

【问题讨论】:

【参考方案1】:

我将问题解释如下:文件DotNetConfig.xsd&lt;startup&gt; 元素的定义错误(或不完整)。所有DotNetConfig.xsdDotNetConfig35.xsdDotNetConfig30.xsdDotNetConfig20.xsd 文件的第 230 行包含

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

另一方面,Microsoft 将startup settings schema 描述为非空元素。因此,我建议将DotNetConfig.xsd%ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas 目录(或64 位系统上的%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemas 目录)中的所有DotNetConfigXX.xsd 文件中的上述行替换为以下行:

<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 进行此类修改并重新启动后,您将不会收到您描述的警告。当然可以以更详细的方式定义所有属性或元素的模式(特别是如果我们找到&lt;startup&gt; 部分的更详细文档),但我只想描述问题的原因和解决它的一种方法.

顺便说一句,DotNetConfig.xsdDotNetConfig35.xsd 和其他DotNetConfigXX.xsd 文件之间的选择将根据同一目录中catalog.xml 文件的内容来完成,其架构描述为here。 catalog.xml 文件的标准版本包含以下几行:

<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig20.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v2.')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig30.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v3.0')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig35.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v3.5')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig.xsd"   condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v4.') or $TargetFrameworkMoniker = ''" />

因此,所有具有.config 扩展名的文件都将被 Visual Studio 解释为具有上述文件中的一个所描述的 XSD 架构的文件。

【讨论】:

谢谢。那成功了。我什至没有想过xsd与VS一起发货的可能性是错误的。 @Sebastian P.R. Gingter:欢迎您!没有人是完美的。微软也是。为所有 .config 文件(app.config、web.config 等)使用一个 XSD 并不是一个好主意。因此,配置模式还有其他密切的问题。尽管如此,我很高兴听到我帮助了你。马赫的肠子! 也为我消除了 41 个警告。非常感谢:) @Øyvind Knobloch-Bråthen:不客气!我也花了很多时间,直到我找到原因并为我解决了它。后来我写了答案。我敢肯定,许多查看 Visual Studio 警告的人都会把时间花在奇怪的消息上。很遗憾,Micosoft 直到没有解决问题。 即使在 SP1 中,它似乎也没有被修复,可悲。但是感谢您的出色回答。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

这是一篇旧帖子 - 但我刚刚遇到了同样的问题。

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

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

    MSVS > 打开项目 app.config

    XML > 创建架构

    这将在 %TEMP% 中创建“app.xsd”

     EXAMPLE: c:\users\paulsm\AppData\Local\Temp\app.xsd
    

    将 app.xsd 移至项目目录

    App.Config,右键单击 > 属性 > 架构 > ... app.xsd > 使用 > 使用此架构 = YES

【讨论】:

以上是关于Visual Studio 总是为 App.config 选择错误的 xsd的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 C++:malloc()/HeapAlloc 总是为最小的分配大小分配新页面

用户控件总是使 Visual Studio 崩溃

用Microsoft Visual Studio 2010编译下面这个程序总是提示Debug Assertion Failed

Visual Studio Code 总是使用旧版本的 tsc

visual studio2005中怎么更改调试的默认浏览器?总是调试出错!

为啥 JavaScript Intellisense 在 Visual Studio 2012 中并不总是有效?