2009-05-21 6 views
24

J'ai un script qui convertit un fichier texte en un fichier de ressources, de sorte que je puisse prendre en charge plusieurs langues en convertissant des fichiers texte pour différentes langues en différentes ressources. Une fois que j'ai exécuté le script pour obtenir le fichier resx, je dois alors exécuter un outil de construction personnalisé (comme décrit ici: Link to Code Project) afin de créer les fichiers Designer.cs pour utiliser les nouveaux fichiers. En accord avec la philosophie que je devrais être capable de construire l'ensemble du projet avec un simple clic de bouton, comment puis-je supprimer l'étape où je dois appeler explicitement l'outil de construction personnalisé afin de faire les fichiers codebehind?Exécution d'un outil personnalisé Visual Studio au moment de la construction

J'ai essayé de supprimer automatiquement les fichiers Designer.cs comme une étape de pré-construction, car je pense que l'outil de construction personnalisé s'exécuterait automatiquement s'il n'y avait pas de fichiers Designer.cs, mais pas de dés.

Donc, je veux que mon script de compilation dans Visual Studio/msbuild à faire: 1) convertir le texte en ResX (fait) 2) déplacer resx dans le répertoire approprié (fait) 3) créer des fichiers en utilisant designer.cs un outil de construction personnalisé (pas fait)

Il est cette dernière étape ...

Répondre

3

Malheureusement, je ne pense pas qu'il y ait un moyen facile de faire cela. Les outils de génération personnalisés s'exécutent uniquement à partir de VS.NET. Ils ne s'exécutent pas lorsque vous générez votre projet à l'aide de MSBuild à partir de la ligne de commande. En général, si vous avez le choix d'écrire un outil de construction en tant qu'outil de création de client ou une tâche MSBuild, choisissez la tâche MSBuild chaque fois que ces tâches seront exécutées dans VS.NET et à partir de la ligne de commande.

Les fichiers designer.cs pour les ressources sont là pour supporter votre codage. Ils vous donnent l'accès fortement typé dans le fichier de ressources. Donc, tant que vous créez vos ressources invariantes de culture dans VS.NET (et laissez-le créer les fichiers .designer.cs) alors l'ajout de support de langue supplémentaire plus tard (fichiers .resx supplémentaires) devrait fonctionner correctement. Cependant, si vos fichiers texte sont vos principaux fichiers de ressources et que vous ajoutez d'abord de nouvelles chaînes de ressources dans ces fichiers texte, vous devrez trouver un autre moyen de générer des fichiers .cs qui vous permettent de coder contre ces ressources. Si vous deviez, générer le fichier .designer.cs vous-même (ou quelque chose de similaire) ne serait pas si difficile. En utilisant CodeDom ou T4, vous pouvez créer la classe auxiliaire en utilisant un fichier .designer.cs existant en tant que modèle.

0

Avez-vous essayé d'ajouter une étape Exec dans l'étape Before/AfterBuild de votre csproj? Vous devez modifier manuellement le fichier pour cela, mais cela devrait résoudre votre problème.

Je ne suis pas entièrement sûr si vous voulez que cela soit fait avant ou après la construction. Si vous en avez besoin après Pass1/Pass2, vous pouvez vous connecter directement aux cibles. Essayez de regarder dans Microsoft.Build.Common.Targets pour avoir une idée de la façon de procéder.

2

Il existe un moyen de générer * .Designer.cs pour * .resx dans le cadre du processus de construction. Il existe une tâche MSBuild intégrée GenerateResource, qui consiste essentiellement en un wrapper autour de l'outil SDK resgen.exe. Here vous pouvez trouver un exemple comment l'utiliser.

Une autre chose que vous trouveriez utile, si la version * .Designer.cs générée n'est pas correcte, fondamentalement, la tâche GenerateResource n'appelle pas la version souhaitée de resgen.exe, la propriété de réglage SdkToolsPath pourrait vous aider.

Questions connexes