En Visual Studio, ¿puedo hacer que un archivo ejecute la herramienta personalizada de otro? (en este caso usando xsd2code)

StackOverflow https://stackoverflow.com/questions/9325165

Pregunta

Estoy tratando de resolver si es posible, cuando utilizo una herramienta personalizada en Visual Studio, para tener un cambio en el contenido de un archivo, active la herramienta personalizada de otra.

Mi escenario es este:

En un proyecto Visual Studio C#, tengo un esquema XML "Master.xsd" que incluye varios otros archivos XSD. Estoy usando el XSD2CODE Visual Studio Herramienta personalizada para generar A .cs a partir del esquema. Esto funciona bien cuando cambia Master.xsd, pero me gustaría que la herramienta personalizada se ejecute en el archivo maestro.xsd cuando cambia uno de los otros XSDS.

¿Hay alguna forma de un archivo que active la herramienta personalizada de otro?

Editar: más detalles sobre por qué estoy buscando usar una herramienta personalizada para esto

En la actualidad tenemos un archivo GenerateFiles.bat que llama a XSD2Code desde la línea de comando para generar los campos de código a partir de los esquemas (como lo sugirió MattDavey a continuación). Esto funciona, es demasiado lento.

El problema es que en cada compilación XSD2Code se ejecutará, pero debido a que muchos otros proyectos dependen de este proyecto con los esquemas, todos también recompilarán a pesar de que probablemente nada ha cambiado. El resultado práctico es que incluso un cambio menor en una prueba unitaria implica la mitad de los proyectos que se recompensan. Es por eso que hemos estado viendo el enfoque de herramienta personalizada para generar solo los archivos de código si el esquema cambia.

¿Fue útil?

Solución

Utilizo mucho XSD2Code de esta manera, pero mi enfoque es agregar un evento previo a la construcción que llama a la línea de comandos XSD2Code y regenera el XML en cada compilación.

Mi evento previo a la construcción se ve así:

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

En su caso, puede ejecutar este paso previo a la construcción solo en el XSD maestro (que supongo que XSD: importa los otros esquemas), o puede ejecutar el comando en cada uno de sus archivos de esquema individualmente.

La ventaja de esto es que, si cambio el esquema XSD, obtengo errores de tiempo de compilación muy útiles :)

¡Espero que te dé algunas ideas!

EDITAR

Pasé un tiempo pensando en el problema que destacó con respecto al tiempo de compilación y modifiqué el script previo a la construcción así:

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs.temp /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

fc $(ProjectDir)Api\Schemas\MySchema.cs  $(ProjectDir)Api\Schemas\MySchema.cs.temp

if errorlevel 1 copy $(ProjectDir)Api\Schemas\MySchema.cs.temp $(ProjectDir)Api\Schemas\MySchema.cs /Y

del $(ProjectDir)Api\Schemas\MySchema.cs.temp

Entonces, XSD2Code ahora está generando el código fuente en un archivo temporal, que solo está sobrescribiendo el archivo .cs existente si es diferente. Este debería significa que si el .xsd no ha cambiado en absoluto, tampoco lo harán los .cs generados :)

Todavía estás recibiendo el golpe de ejecutar XSD2Code, pero no estás recibiendo el golpe de la reconstrucción de MSBuild una cadena completa de proyectos si la fuente generada era la misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top