如何从一个类创build一个XSD架构?
我很难与XSD文件。
我试图从一个类创build一个XSD文件:
public enum Levels { Easy, Medium, Hard } public sealed class Configuration { public string Name { get;set; } public Levels Level { get; set; } public ConfigurationSpec { get;set;} } public abstract class ConfigurationSpec { } public class ConfigurationSpec1 { // ... } public class ConfigurationSpec2 { // ... }
请注意,我在configuration中有一个抽象类。 有了这个function,是否有可能创buildXSD,如果可能的话呢?
这个想法是将类Configuration传递给XSD。
您可以使用XSD.exe
(可从您的Visual Studio安装。)
public sealed class Configuration { public string Name { get; set; } public Levels Level { get; set; } public ConfigurationSpec Spec { get; set; } } public abstract class ConfigurationSpec { } public class ConfigurationSpec1 { } public class ConfigurationSpec2 { }
结果是
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Levels" type="Levels" /> <xs:simpleType name="Levels"> <xs:restriction base="xs:string"> <xs:enumeration value="Easy" /> <xs:enumeration value="Medium" /> <xs:enumeration value="Hard" /> </xs:restriction> </xs:simpleType> <xs:element name="Configuration" nillable="true" type="Configuration" /> <xs:complexType name="Configuration"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> <xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" /> <xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" /> </xs:sequence> </xs:complexType> <xs:complexType name="ConfigurationSpec" abstract="true" /> <xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" /> <xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" /> <xs:complexType name="ConfigurationSpec1" /> <xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" /> <xs:complexType name="ConfigurationSpec2" /> </xs:schema>
所有你需要做的就是编译你的程序集并运行XSD.exe
和你的程序集的path作为参数。 XSD.exe /?
也有所有参数的列表。
示例: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll
您可以成功地将xsd.exe
集成到Visual Studio IDE中,如下所示:
进入Tools, External Tools
,然后单击添加button:
2010
2015年/ 2017年
标题:
从类创build模式
命令(每个框架):
4
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe
4.5.1
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe
4.6。*
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe
参数:
$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)
使用输出窗口:
防止额外的命令窗口popup,并保持输出的logging,直到您清除它。 可能是一个好主意。
提示参数:
检查是否要testing输出或排除故障; 否则,请不要选中。
点击OK
如何使用:
- 编译你的项目!
XSD.exe
只看编译的代码。 - 在解决scheme资源pipe理器中单击该类。
- 单击
Tools, Create Schema From Class
- 点击Solution Explorer中的Show All Filesbutton。
- 在你的类中查找相同的文件夹,你会看到
Schema0.xsd
。 - 在
Schema0.xsd
单击鼠标右键,然后selectInclude In Project
- 将
Schema0.xsd
重命名为<the name of the class>.xsd
- (可选)如果要使用此模式编辑xml编辑器中的xml文件,并且没有使用所有属性,则可能必须手动编辑此新的
xsd
。 你可以用use="required"
replace为use="optional"
来摆脱xml编辑器中的蓝色波浪线(创build警告),如果确实不需要这些属性的话。