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
对<startup>
元素的定义错误(或不完整)。所有DotNetConfig.xsd
、DotNetConfig35.xsd
、DotNetConfig30.xsd
和DotNetConfig20.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 进行此类修改并重新启动后,您将不会收到您描述的警告。当然可以以更详细的方式定义所有属性或元素的模式(特别是如果我们找到<startup>
部分的更详细文档),但我只想描述问题的原因和解决它的一种方法.
顺便说一句,DotNetConfig.xsd
、DotNetConfig35.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 总是为最小的分配大小分配新页面
用Microsoft Visual Studio 2010编译下面这个程序总是提示Debug Assertion Failed
Visual Studio Code 总是使用旧版本的 tsc