In Visual Studio, posso fare un unico file eseguire di un altro strumento personalizzato? (In questo caso utilizzando Xsd2Code)

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

Domanda

Sto cercando di capire se è possibile, quando si utilizza uno strumento personalizzato in Visual Studio, per avere un cambiamento nel contenuto di un file, attivare lo strumento personalizzato di un altro.

Il mio scenario è questo:

In un # progetto di Visual Studio C, ho uno schema XML "master.xsd", che comprende molti altri altri file XSD. Sto usando il Xsd2Code Visual Studio strumento personalizzato per generare una cs dallo schema. Questo funziona bene quando il master.xsd si cambia, ma vorrei lo strumento personalizzato per funzionare su file master.xsd quando uno degli altri XSD modifiche.

C'è un modo di innescare un file di un altro strumento personalizzato?

[EDIT - maggiori dettagli sul motivo per cui sto cercando in utilizzando uno strumento personalizzato per questo]

Al momento abbiamo un file GenerateFiles.bat che chiama Xsd2Code dalla riga di comando per generare i fiels codice della schemi (come suggerito da MattDavey sotto). Questo funziona, è semplicemente troppo lento.

Il problema è che su ogni Xsd2Code build, correre, ma perché un sacco di altri progetti dipendono da questo progetto con gli schemi, saranno tutti ricompilazione troppo, anche se probabilmente non è cambiato nulla. Il risultato pratico è che anche un piccolo cambiamento di una prova di unità comporta metà dei progetti ricompilazione. Questo è il motivo per cui abbiamo cercato l'approccio strumento personalizzato per generare solo i file di codice se le modifiche dello schema.

È stato utile?

Soluzione

Io uso Xsd2Code molto in questo modo, ma il mio approccio è quello di aggiungere un evento di pre-compilazione che richiama la linea di comando Xsd2Code e rigenera il xml in ogni generazione ..

Il mio pre-compilazione sguardi evento come questo:

$(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+

Nel tuo caso è possibile eseguire questa fase di pre-build solo sul master XSD (che sto cercando di indovinare xsd: Importazioni gli altri schemi)., O si può eseguire il comando su ciascuno dei vostri file di schema singolarmente

Il vantaggio di questo è che, se cambio lo schema XSD, ottengo errori di compilazione molto utili:)

La speranza che ti dà qualche idea!

Modifica

Ho trascorso qualche tempo a pensare al problema che hai evidenziato quanto riguarda tempo di costruzione e modificato lo script di pre-build in questo modo:

$(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

Così Xsd2Code sta ora generando il codice sorgente in un file temporaneo, che è solo di sovrascrivere il file con estensione cs esistente se è diverso. Questo dovrebbe significa che se il .xsd non è cambiato per niente, neppure le .cs generati:)

Si sta ancora prendendo il colpo di correre xsd2code, ma non stai prendendo il colpo di msbuild ricostruzione di un'intera catena di progetti se la sorgente generato è stato lo stesso ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top