Dans Visual Studio, puis-je faire un fichier exécuter un autre outil de personnalisé? (Dans ce cas en utilisant Xsd2Code)

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

Question

Je suis en train de travailler s'il est possible, lorsque vous utilisez un outil personnalisé dans Visual Studio, d'avoir un changement dans le contenu d'un fichier, déclencher l'outil personnalisé d'un autre.

Mon scénario est le suivant:

Dans un projet Visual Studio C #, j'ai un schéma XML « de master.xsd » qui comprend plusieurs autres autres fichiers XSD. J'utilise le Xsd2Code Visual Studio personnalisé outil pour générer un .cs du schéma. Cela fonctionne bien lorsque le master.xsd change lui-même, mais je voudrais l'outil personnalisé pour exécuter sur le fichier master.xsd lorsque l'un des autres changements XSD.

Est-il possible d'un fichier de déclenchement d'un autre outil personnalisé?

[EDIT - plus de détails sur la raison pour laquelle je suis à la recherche en utilisant un outil personnalisé pour cette]

À l'heure actuelle, nous avons un fichier GenerateFiles.bat qui appelle Xsd2Code de la ligne de commande pour générer le code fiels des schémas (comme suggéré par MattDavey ci-dessous). Cela fonctionne, est tout simplement trop lent.

Le problème est que sur chaque Xsd2Code de construction seront, courir, mais parce que beaucoup d'autres projets dépendent de ce projet avec les schémas, ils seront tous recompilation aussi bien que probablement rien n'a changé. Le résultat pratique est que même un changement mineur à un test unitaire implique la moitié des projets recompiler. Voilà pourquoi nous avons examiné l'approche de l'outil personnalisé pour générer uniquement les fichiers de code si le changement de schéma.

Était-ce utile?

La solution

J'utilise Xsd2Code beaucoup de cette façon, mais mon approche est d'ajouter un événement pré-construction qui appelle la ligne de commande Xsd2Code et régénère le xml sur chaque build ..

Mon événement pré-construction se présente comme suit:

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

Dans votre cas, vous pouvez exécuter cette étape de pré-construction uniquement sur le xsd maître (que je devine xsd: Importe les autres schémas)., Ou vous pouvez exécuter la commande sur chacun de vos fichiers de schéma individuellement

L'avantage est que, si je change le schéma XSD, je reçois des erreurs de temps de compilation très utiles:)

L'espoir que vous donne quelques idées!

EDIT

J'ai passé quelque temps à penser à propos de la question que vous surligné en ce qui concerne le temps de construction et a modifié le script de pré-construction comme ceci:

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

Xsd2Code génère maintenant le code source dans un fichier temporaire, qui est seul le fichier écrasant .cs existant si elle est différente. Cette devrait signifie que si le .xsd n'a pas changé du tout, pas ni les .cs générés:)

Vous prenez toujours le coup de courir xsd2code, mais vous ne prenez pas le coup de msbuild la reconstruction d'une chaîne de projets ensemble si la source généré est le même ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top