visual studio generate from c# xml xsd xsd.exe linq-to-xsd

c# - studio - ¿Cómo crear un esquema XSD desde una clase?



generate class from xsd c# (2)

Puede integrar con éxito xsd.exe en el IDE de Visual Studio de esta manera:

Vaya a Tools, External Tools y haga clic en el botón Agregar :

2010

2015/2017

Título:

Crear esquema de la clase

Comando (por marco):

4.0

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

Argumentos:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

Utilizar ventana de salida:

Evita que aparezca una ventana de comando adicional y mantiene un registro de la salida hasta que la borres. Probablemente sea una buena idea.

Solicitud de argumentos:

Marque si desea probar la salida o solucionar problemas; De lo contrario, dejar sin marcar.

Haga clic en OK

Cómo utilizar:

  1. ¡Compila tu proyecto! XSD.exe solo mira el código compilado.
  2. Haga clic en la clase en el Explorador de soluciones .
  3. Haga clic en Tools, Create Schema From Class
  4. Haga clic en el botón Mostrar todos los archivos en el Explorador de soluciones .
  5. Busque en la misma carpeta que su clase y verá Schema0.xsd .
  6. Haga clic derecho en Schema0.xsd y elija Include In Project
  7. Cambie el nombre de Schema0.xsd a <the name of the class>.xsd
  8. (opcional) Es posible que deba editar este nuevo xsd a mano si desea editar archivos xml en el editor xml utilizando este esquema y no está usando todos los atributos. Puede reemplazar use="required" con use="optional" para deshacerse de las líneas onduladas azules en el editor xml (que crea advertencias), si de hecho estos atributos no son necesarios.

Estoy teniendo dificultades con los archivos XSD.

Estoy tratando de crear un archivo XSD de una clase:

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 { // ... }

Tenga en cuenta que tengo una clase abstracta dentro de la configuración. Con esa característica, ¿es posible crear el XSD y, si es posible, cómo?

La idea es pasar la configuración de clase al XSD.


Puede usar XSD.exe (disponible desde su instalación de 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 { }

resultados en

<?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>

Todo lo que tiene que hacer es compilar su ensamblaje y ejecutar XSD.exe con la ruta a su ensamblaje como argumento. XSD.exe /? tiene una lista de todos los argumentos también.

Ejemplo: XSD.exe C:/Dev/Project1/Bin/Debug/library.dll