2

简而言之:我可以阻止 Visual Studio 在其内部智能感知引擎中加载一些 xsd 吗?加载某些 xsd 会破坏智能感知。


为了对各种 xml 文档执行输入验证,我使用 xsd。我使用的一些 xsd 文件是标准的,例如 xml.xsd 和各种 xhtml xsd。这些 xsd 文件作为嵌入式资源包含在类库中。

但是,在解决方案中包含这些文件会破坏 Visual Studio 对各种 xml 文件的智能感知,即使在不同的项目中也是如此。似乎正在发生的事情是,Visual Studio 自己的 xsd 文件和“自定义”嵌入式 xsd 文件都已加载,可能是因为它们适用于相同的targetNamespace. 但是,这会导致很多警告,例如:The global attribute 'http://www.w3.org/XML/1998/namespace:lang' has already been declared. xslt 文件特别烦人,但似乎所有匹配多个模式的 xml 文件都会发生这种情况。XHTML 是另一种特别有问题的情况,因为只有一个名称空间(严格的、过渡的......)有多个模式。因此,智能感知停止为打开的 xml 文件工作。此外,VS 的错误列表中充斥着大量虚假警告,隐藏了潜在有用的警告。

我可以使用禁用或删除这些模式,XML > Schemas... 但这是一个不可行的解决方案,因为每当我打开不同的 xml 文件时它们都会重新添加。我必须每天可能数百次删除模式。

有没有办法将 Visual Studio 配置为不自动加载嵌入式模式,或者一劳永逸地只加载特定的模式?

4

1 回答 1

2

基于缺乏响应,我猜这只是一个错误:智能感知根本无法处理这种情况。

我已经提交了错误报告,如果找到解决方案,我将更新此答案:http ://connect.microsoft.com/VisualStudio/feedback/details/777572/visual-studio-2012-xml-intellisense-broken-due- to-auto-loading-duplicate-xsd-files

解决方案/解决方法

如果您在本地包含标准xsd(几乎可以肯定,因为它们与 Visual Studio 自己xsd的冲突),您可能不需要对它们进行太多编辑 - 只需将它们作为资源包含在内。因此,我决定将违规文件重命名xml.xsdxml.xsd.intellisensehack. 文件扩展名与资源代码无关(您仍然可以像任何其他流一样打开它),但 Visual Studio 不再自动尝试将该文件用作智能感知模式源。

于 2013-02-18T13:14:25.290 回答