2009-07-16 58 views
30

¿Cuál es la mejor forma de generar clases C# a partir de múltiples archivos de esquema XSD?Múltiples archivos de esquema XSD a clases C#

Algunos archivos de esquema XSD pueden tener dependencia del otro, estoy tratando de evitar que se generen clases C# duplicadas.

Respuesta

38

Utilice el programa XSD.EXE, pero pase todos los de los esquemas al programa en la misma línea de comando.

Por ejemplo:

> xsd /c qbxmltypes130.xsd QBUqbxmlops130.xsd QBUqbxmlso130.xsd QBUqbxml130.xsd 

emitirá una clase llamada:

qbxmltypes130_QBUqbxmlops130_QBUqbxmlso130_QBUqbxml130.cs 

En este caso se trata de archivos xsd Quickbooks escritorio SDK, y el archivo final tiene los tipos de los que depende, en primer 3 archivos. No se emitirá por sí mismo, pero con sus dependencias funciona como se desee.

Tenga en cuenta que hay un interruptor /parameters:<file> que le permite especificar un archivo de parámetros de línea de comandos. Recuerdo usarlo en un proyecto por una razón similar.

XSD.EXE doc tiene el formato de parámetro.

+2

Simplemente añadiendo un ejemplo "xsd.exe/classes/n: {your_namespace} {} archivo1 archivo2 .xsd {} {.xsd archivo3 } .xsd/out: {su carpeta de salida} " – vivekp

+0

No es necesario usar Altova XML Spy para generar clases C# desde XSD con múltiples referencias a partir de ahora. – Joset

+1

Una última adición al excelente ejemplo de @vivekp dio: El último archivo nombrado en la secuencia parece ser el usado para generar el nombre del archivo de clase. Entonces su ejemplo produciría el archivo de clase {su carpeta de salida} \ {archivo3} .cs – PellucidWombat

27

Por mi parte, me faltaron los ejemplos en el documento MSDN. He aquí un ejemplo de parámetros de archivo para la emisión codemeit describe:

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'> 
<generateClasses language='CS' namespace='Namespace.subnamespace'> 
    <schema>FirstSchema.xsd</schema> 
    <schema>AnotherSchema.xsd</schema> 
    <schema>LastSchema.xsd</schema> 
</generateClasses> 
</xsd> 
+1

Gracias, @anony_mouse - ¡Estaba buscando un buen ejemplo de esa sintaxis! – ewall

+6

si obtiene el error "ruta de acceso especificada o nombre de archivo demasiado largo" intente colocar un ". \" Delante del último archivo y resuelve el problema, tenga en cuenta que el archivo de salida se nombrará con el último archivo ... – Peter

+0

@ Peter WOW gracias – dpant

Cuestiones relacionadas