¿Cómo obligar al comando xsd.exe a poner el nombre que deseemos a nuestra clase de c# creada a partir de archivos xsd?

Para todos los que hemos trabajado con facturación electrónica nos resulta común crear nuestras clases a partir de los archivos xsd otorgados por hacienda.

Hay un bug cuando creamos nuestra clase a partir de muchos xsd con la aplicación xsd.exe ya que esta le agrega al nombre final la concatenación de los nombres de todos los archivos utilizados, pero en Windows tenemos una limitante de 248 caracteres.

Por ejemplo para la facturación electrónica de Colombia tenemos que utilizar más de 10 archivos xsd y lo normal es que utilizáramos un comando así:

xsd 
DIAN_UBL.xsd DIAN_UBL_Structures.xsd xmldsig-core-schema.xsd CodeList_CurrencyCode_ISO_7_04.xsd CodeList_LanguageCode_ISO_7_04.xsd CodeList_MIMEMediaTypeCode_IANA_7_04.xsd CodeList_UnitCode_UNECE_7_04.xsd UBL-CommonAggregateComponents-2.0.xsd UBL-CommonBasicComponents-2.0.xsd UBL-CommonExtensionComponents-2.0.xsd UBL-ExtensionContentDatatype-2.0.xsd UBL-QualifiedDatatypes-2.0.xsd UnqualifiedDataTypeSchemaModule-2.0.xsd /classes

El cual nos dará un error ya que la concatenación del nombre del archivo resultante supera los 248 caracteres.
Para otorgarle un nombre de salida debemos hacer lo siguiente:

xsd DIAN_UBL_Structures.xsd xmldsig-core-schema.xsd CodeList_CurrencyCode_ISO_7_04.xsd CodeList_LanguageCode_ISO_7_04.xsd CodeList_MIMEMediaTypeCode_IANA_7_04.xsd CodeList_UnitCode_UNECE_7_04.xsd UBL-CommonAggregateComponents-2.0.xsd UBL-CommonBasicComponents-2.0.xsd UBL-CommonExtensionComponents-2.0.xsd UBL-ExtensionContentDatatype-2.0.xsd UBL-QualifiedDatatypes-2.0.xsd UnqualifiedDataTypeSchemaModule-2.0.xsd .\DIAN_UBL.xsd /classes

Poniendo .\DIAN_UBL.xsd antes del parámetro /clases hará que nuestro archivo final se llame DIAN_UBL.cs.

Video explicando paso a paso:

Autor: Héctor de León

Desarrollador de software, lector compulsivo.