XML 架构定义工具 (Xsd.exe)

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 工具正常运行,必须正确设置PathIncludeLib环境变量。 通过运行位于 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 标准(例如,没有空格或反斜杠字符)。
选项 以下值之一:nonepropertiesorder(生成属性而不是公共字段的是 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 取消显示版权标志。 设置为 truefalse
帮助 显示该工具的命令语法和选项。 设置为 truefalse

例子

以下命令生成 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

另请参阅