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:
- ¡Compila tu proyecto!
XSD.exe
solo mira el código compilado. - Haga clic en la clase en el Explorador de soluciones .
- Haga clic en
Tools, Create Schema From Class
- Haga clic en el botón Mostrar todos los archivos en el Explorador de soluciones .
- Busque en la misma carpeta que su clase y verá
Schema0.xsd
. - Haga clic derecho en
Schema0.xsd
y elijaInclude In Project
- Cambie el nombre de
Schema0.xsd
a<the name of the class>.xsd
- (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 reemplazaruse="required"
conuse="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