我刚刚发现了Visual Studio自动生成XSD架构的美妙之处。*
是否有一种简单的方法让VS自动将具有特定名称的文件附加到现有XSD架构?因此,如果我在整个项目(或多个项目)中分散myconfig.xml
个文件,我希望它们始终针对myconfig.xsd
进行验证,而不是必须打开每个XML文件并手动关联它。这可能吗?
*对于那些不熟悉的人:Open XML文件,XML / Create Schema和 它创建了一个很好的模式文件基于 它在您的XML文件中看到了什么。您可以 然后将相同的XSD附加到另一个 打开该文件的XML文件 选择XML / Schemas并选择 来自项目的适当模式。然后,您将获得所有元素和属性名称,必需元素和属性等的智能感知和验证。
更新:我想我不是很清楚。
当我在项目中的任何位置创建新的web.config
文件时,我不会手动为其分配架构。 XML中没有指定名称空间。然而,Visual Studio自动知道使用DotNetConfig.xsd
:
据推测,Visual Studio在某处可以将名为web.config
的文件分配给DotNetConfig.xsd
。
现在,假设我希望名为DbSchema.xml
的所有文件自动使用我创建的名为DbSchema.xsd
的模式。有没有办法做到这一点?
答案 0 :(得分:5)
如果您的模式与XML文件位于同一工作区(不一定是项目),则只要您的文件具有名称空间声明,Visual Studio就会自动使用它们进行自动完成和验证。
您甚至不需要输入schemaLocation属性。
尝试以下方法:
要检查它是否正常工作,请尝试在某处放置一个开放的尖括号,它应该建议元素名称。
编辑:这也适用于没有命名空间的XML文件,但是您可能需要向%Install%\ Xml \ Schemas as described here添加新的架构目录。在底部附近,它描述了如何使用“Association”元素通过扩展名关联模式。
答案 1 :(得分:1)
任何XML文档中的任何标记都可以引用模式。
请参阅此示例:http://msdn.microsoft.com/en-us/library/ms757863(VS.85).aspx
答案 2 :(得分:1)
使用时,添加名称如http //...../ xxx.xsd或../Common/xxx.xsd这样简单
<configuration>
<configSections>
<section name="RouteConfigSection" type="RouteSection.RouteConfigSection,RouteSection" />
</configSections>
<RouteConfigSection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="RouteConfigSection.xsd">
<routes>...
同时
public class RouteConfigSection : ConfigurationSection
{
[ConfigurationProperty("routes", IsDefaultCollection = false)]
public RouteConfigElementCollection Routings { get { return (RouteConfigElementCollection)base["routes"]; } }
//https://github.com/bspell1/NLogEx/blob/master/NLogEx.Mvc/Config/Config.cs
[ConfigurationProperty("xmlns")]
private String Ns1 { get { return null; } }
[ConfigurationProperty("xmlns:xsi")]
private String Ns2 { get { return null; } }
[ConfigurationProperty("xsi:noNamespaceSchemaLocation")]
private String Ns3 { get { return null; } }
}