XML 架构定义(Xsd.exe)工具从 XDR、XML 和 XSD 文件或运行时程序集中的类生成 XML 架构或公共语言运行时类。
XML 架构定义工具 (Xsd.exe) 通常可在以下路径中找到:
              C:\Program Files (x86)\Microsoft SDKs\Windows\{version}\bin\NETFX {version} Tools\
语法
从命令行运行该工具。
xsd file.xdr [-outputdir:directory][/parameters:file.xml]
xsd file.xml [-outputdir:directory] [/parameters:file.xml]
xsd file.xsd {/classes | /dataset} [/element:element]
             [/enableLinqDataSet] [/language:language]
                          [/namespace:namespace] [-outputdir:directory] [URI:uri]
                          [/parameters:file.xml]
xsd {file.dll | file.exe} [-outputdir:directory] [/type:typename [...]][/parameters:file.xml]
小窍门
若要使 .NET Framework 工具正常运行,必须正确设置PathInclude和Lib环境变量。 通过运行位于 SDK<\version>\<Bin 目录中的 SDKVars.bat>来设置这些环境变量。 必须在每个命令行界面中执行 SDKVars.bat。
论点
| 论点 | DESCRIPTION | 
|---|---|
| file.extension | 指定要转换的输入文件。 必须将扩展名指定为下列之一:.xdr、.xml、.xsd、.dll或 .exe。 如果指定 XDR 架构文件 (.xdr 扩展名),Xsd.exe 将 XDR 架构转换为 XSD 架构。 输出文件的名称与 XDR 架构相同,但扩展名为 .xsd。 如果指定 XML 文件(.xml 扩展名),Xsd.exe 从文件中的数据推断架构并生成 XSD 架构。 输出文件的名称与 XML 文件相同,但扩展名为 .xsd。 如果指定 XML 架构文件(.xsd 扩展名),Xsd.exe 为对应于 XML 架构的运行时对象生成源代码。 如果指定运行时程序集文件(.exe 或 .dll 扩展名),Xsd.exe 为该程序集中的一个或多个类型生成架构。 可以使用该 /type选项指定要为其生成架构的类型。 输出架构命名为 schema0.xsd、schema1.xsd 等。 仅当给定类型使用XMLRoot自定义属性指定命名空间时,Xsd.exe 才会生成多个架构。 | 
常规选项
| 选项 | DESCRIPTION | 
|---|---|
| /h[elp] | 显示该工具的命令语法和选项。 | 
| /o[utputdir]:目录 | 指定输出文件的目录。 此参数只能显示一次。 默认为当前目录。 | 
| /? | 显示该工具的命令语法和选项。 | 
| /p[arameters]:file.xml | 从指定的 .xml 文件中读取各种操作模式的选项。 短形式为 /p:. 有关详细信息,请参阅备注部分。 | 
XSD 文件选项
必须为 .xsd 文件指定以下选项之一。
| 选项 | DESCRIPTION | 
|---|---|
| /c[lasses] | 生成与指定架构对应的类。 若要将 XML 数据读入对象,请使用 XmlSerializer.Deserialize 该方法。 | 
| /d[ataset] | 生成派生自 DataSet 与指定架构对应的类。 若要将 XML 数据读入派生类,请使用 DataSet.ReadXml 该方法。 | 
还可以为 .xsd 文件指定以下任一选项。
| 选项 | DESCRIPTION | 
|---|---|
| /e[lement]:element | 指定要为其生成代码的架构中的元素。 默认情况下,键入所有元素。 可以多次指定此参数。 | 
| /enableDataBinding | 在所有生成类型上实现INotifyPropertyChanged接口,以启用数据绑定。 短形式为 /edb. | 
| /enableLinqDataSet | (缩写形式: /eld。)指定可使用 LINQ to DataSet 查询的生成的数据集。 同时指定 /dataset 选项时,将使用此选项。 有关详细信息,请参阅 LINQ to DataSet 概述 和 查询类型化数据集。 有关使用 LINQ 的一般信息,请参阅 Language-Integrated 查询 (LINQ) - C# 或 Language-Integrated 查询 (LINQ) - Visual Basic。 | 
| /f[ields] | 仅生成字段。 默认情况下,会生成 具有后盾字段的属性 。 | 
| /l[anguage]:语言 | 指定要使用的编程语言。 选择 CS(C#,默认值)、VB(Visual Basic)、JS(JScript)或VJS(Visual J#)。 还可以为实现类指定完全限定的名称 System.CodeDom.Compiler.CodeDomProvider | 
| /n[amespace]:namespace | 指定生成的类型的运行时命名空间。 默认命名空间为 Schemas。 | 
| /nologo | 取消显示版权标志。 | 
| /次序 | 为所有粒子成员生成显式顺序标识符。 | 
| /o[ut]:directoryName | 指定要在其中放置文件的输出目录。 默认为当前目录。 | 
| /u[ri]:uri | 指定要为其生成代码的架构中的元素的 URI。 此 URI(如果存在)适用于使用 /element该选项指定的所有元素。 | 
DLL 和 EXE 文件选项
| 选项 | DESCRIPTION | 
|---|---|
| /t[ype]:typename | 指定要为其创建架构的类型的名称。 可以指定多个类型参数。 如果 typename 未指定命名空间,Xsd.exe 将程序集中的所有类型与指定类型匹配。 如果 typename 指定命名空间,则仅匹配该类型。 如果 typename 以星号字符 \\结尾,该工具将匹配以 *前面的字符串开头的所有类型。 如果省略 /type选项,则 Xsd.exe 为程序集中的所有类型生成架构。 | 
注解
下表显示了 Xsd.exe 执行的操作。
| 操作 | DESCRIPTION | 
|---|---|
| XDR 到 XSD | 从 XML-Data-Reduced 架构文件生成 XML 架构。 XDR 是基于 XML 的早期架构格式。 | 
| XML 到 XSD | 从 XML 文件生成 XML 架构。 | 
| XSD 到 DataSet | 从 XSD 架构文件生成公共语言运行时 DataSet 类。 生成的类为常规 XML 数据提供丰富的对象模型。 | 
| XSD 到类 | 从 XSD 架构文件生成运行时类。 生成的类可以与 System.Xml.Serialization.XmlSerializer 一起使用,以读取和写入符合该模式的 XML 代码。 | 
| 类到 XSD | 从运行时程序集文件中的类型或类型生成 XML 架构。 生成的架构定义了 XmlSerializer 使用的 XML 格式。 | 
Xsd.exe 只允许操作遵循由万维网联合会 (W3C) 提议的 XML 架构定义 (XSD) 语言的 XML 架构。 有关 XML 架构定义建议或 XML 标准的详细信息,请参阅 https://w3.org。
使用 XML 文件设置选项
通过使用 /parameters 开关,可以指定一个设置各种选项的 XML 文件。 可以设置的选项取决于如何使用 XSD.exe 工具。 选择包括生成架构、生成代码文件或生成包含 DataSet 功能的代码文件。 例如,可以在生成架构时将元素设置为 <assembly> 可执行文件(.exe)或类型库(.dll)文件的名称,但在生成代码文件时不能。 以下 XML 演示如何将 <generateSchemas> 元素与指定的可执行文件一起使用:
<!-- This is in a file named GenerateSchemas.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
   <assembly>ConsoleApplication1.exe</assembly>
</generateSchemas>
</xsd>
如果上述 XML 包含在名为 GenerateSchemas.xml的文件中,请在命令提示符处键入以下命令并按 /parameters,以使用该开关:
 xsd /p:GenerateSchemas.xml
另一方面,如果要为程序集中找到的单个类型生成架构,则可以使用以下 XML:
<!-- This is in a file named GenerateSchemaFromType.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
   <type>IDItems</type>
</generateSchemas>
</xsd>
但是,若要使用前面的代码,还必须在命令提示符处提供程序集的名称。 在命令提示符处输入以下内容(假设 XML 文件命名为 GenerateSchemaFromType.xml):
xsd /p:GenerateSchemaFromType.xml ConsoleApplication1.exe
必须仅为<generateSchemas>元素指定以下选项之一。
| 元素 | DESCRIPTION | 
|---|---|
| <装配> | 指定要从中生成架构的程序集。 | 
| <类型> | 指定程序集中找到的要为其生成架构的类型。 | 
| <xml> | 指定要为其生成架构的 XML 文件。 | 
| <xdr> | 指定要为其生成架构的 XDR 文件。 | 
若要生成代码文件,请使用 <generateClasses> 元素。 以下示例生成代码文件。 请注意,还显示了两个属性,可用于设置生成的文件的编程语言和命名空间。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateClasses language='VB' namespace='Microsoft.Serialization.Examples'/>
</xsd>
<!-- You must supply an .xsd file when typing in the command line.-->
<!-- For example: xsd /p:genClasses mySchema.xsd -->
您可以为 <generateClasses> 元素设置的选项包括以下内容。
| 元素 | DESCRIPTION | 
|---|---|
| <元素> | 指定要为其生成代码的 .xsd 文件中的元素。 | 
| <schemaImporterExtensions> | 指定从 SchemaImporterExtension 类派生的类型。 | 
| <图式> | 指定要为其生成代码的 XML 架构文件。 可以通过多个 <schema> 元素指定多个 XML 架构文件。 | 
下表显示也可用于 <generateClasses> 元素的特性。
| 特征 | DESCRIPTION | 
|---|---|
| 语言 | 指定要使用的编程语言。 从 CS(C#、默认值)、VB(Visual Basic)、JS(JScript)或VJS(Visual J#)中进行选择。 还可以为实现 CodeDomProvider的类指定完全限定的名称。 | 
| 命名空间 | 指定生成的代码的命名空间。 命名空间必须符合 CLR 标准(例如,没有空格或反斜杠字符)。 | 
| 选项 | 以下值之一: none,properties或order(生成属性而不是公共字段的是enableDataBinding,请参阅之前提到的 XSD 文件选项部分中的/order和/enableDataBinding开关)。 | 
还可以通过使用DataSet元素来控制<generateDataSet>代码的生成方式。 以下 XML 指定生成的代码使用 DataSet 结构(如 DataTable 类)为指定的元素创建 Visual Basic 代码。 生成的数据集结构将支持 LINQ 查询。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
    <generateDataSet language='VB' namespace='Microsoft.Serialization.Examples' enableLinqDataSet='true'>
    </generateDataSet>
</xsd>
您可以为 <generateDataSet> 元素设置的选项包括以下内容。
| 元素 | DESCRIPTION | 
|---|---|
| <图式> | 指定要为其生成代码的 XML 架构文件。 可以通过多个 <schema> 元素指定多个 XML 架构文件。 | 
下表显示了可与元素一起使用 <generateDataSet> 的属性。
| 特征 | DESCRIPTION | 
|---|---|
| enableLinqDataSet | 指定可使用 LINQ to DataSet 查询的生成的数据集。 默认值为 false。 | 
| 语言 | 指定要使用的编程语言。 从 CS(C#、默认值)、VB(Visual Basic)、JS(JScript)或VJS(Visual J#)中进行选择。 还可以为实现 CodeDomProvider的类指定完全限定的名称。 | 
| 命名空间 | 指定生成的代码的命名空间。 命名空间必须符合 CLR 标准(例如,没有空格或反斜杠字符)。 | 
可以在顶级 <xsd> 元素上设置属性。 这些选项可与任何子元素(<generateSchemas><generateClasses>或<generateDataSet>) 一起使用。 以下 XML 代码为名为“MyOutputDirectory”的输出目录中名为“IDItems”的元素生成代码。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/' output='MyOutputDirectory'>
<generateClasses>
    <element>IDItems</element>
</generateClasses>
</xsd>
下表显示也可用于 <xsd> 元素的特性。
| 特征 | DESCRIPTION | 
|---|---|
| 输出 | 将放置生成的架构或代码文件的目录的名称。 | 
| nologo | 取消显示版权标志。 设置为 true或false。 | 
| 帮助 | 显示该工具的命令语法和选项。 设置为 true或false。 | 
例子
以下命令生成 XML 架构 myFile.xdr 并将其保存到当前目录。
xsd myFile.xdr
以下命令从中生成 XML 架构 myFile.xml 并将其保存到指定目录。
xsd myFile.xml /outputdir:myOutputDir
以下命令生成一个数据集,该数据集对应于 C# 语言中的指定架构,并将其 XSDSchemaFile.cs 另存为当前目录中。
xsd /dataset /language:CS XSDSchemaFile.xsd
以下命令为程序集 myAssembly.dll 中的所有类型生成 XML 架构,并将其保存为 schema0.xsd 当前目录中。
xsd myAssembly.dll