Question

J'ai un script qui va convertir un fichier texte dans un fichier de ressources, afin que je puisse avoir le soutien de plusieurs langues en ayant des fichiers texte pour différentes langues converties en différentes ressources. Une fois que je lance le script pour obtenir le fichier resx, je dois ensuite exécuter un outil de construction personnalisé (comme décrit ici: Lien vers le code du projet ) afin de créer les fichiers Designer.cs d'utiliser les nouveaux fichiers.

Conformément à la philosophie que je devrais être en mesure de construire l'ensemble du projet avec un seul clic, comment puis-je supprimer l'étape où je dois appeler explicitement l'outil de construction personnalisé afin de rendre les fichiers CodeBehind?

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

Alors, 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 Designer.cs fichiers à l'aide d'un outil de construction personnalisé (pas fait)

Il est la dernière étape ...

Était-ce utile?

La solution

Malheureusement, je ne pense pas qu'il y ait un moyen facile de faire cela. Construire sur mesure Outils fonctionnent uniquement à partir de VS.NET -. Ils ne fonctionnent pas lorsque vous construisez votre projet en utilisant MSBuild à partir de la ligne de commande

En général, si vous avez le choix d'écrire un outil de construction comme outil de construction client ou un MSBuild Tâche puis choisissez le MSBuild Tâche chaque fois que ces tâches se dérouleront dans VS.NET et de la ligne de commande.

Les fichiers Designer.cs des ressources sont là pour soutenir votre codage. Ils vous donnent l'accès fortement typé dans le fichier de ressources. Donc, aussi longtemps que vous créez votre culture dans les ressources invariantes VS.NET (et laissez-les créer des fichiers .designer.cs) puis en ajoutant un soutien linguistique plus tard (fichiers .resx supplémentaires) devraient fonctionner correctement.

Si, cependant, vos fichiers texte sont vos fichiers de ressources primaires, et vous ajoutez de nouvelles chaînes de ressources dans ces fichiers texte d'abord, vous aurez besoin de trouver une autre façon de générer des fichiers .cs qui vous permettent de coder contre ces ressources. Si vous deviez, générer les .designer.cs fichier vous-même (ou somethign similaire) ne serait pas si difficile. En utilisant CodeDom ou T4 vous pouvez créer la classe d'aide, en utilisant un fichier .designer.cs existant comme modèle.

Autres conseils

Il est un moyen de générer le * .Designer.cs pour * .resx dans le cadre du processus de construction. Il y a un GenerateResource intégré MSBuild, qui essentiellement une enveloppe autour de l'outil SDK resgen.exe. vous trouverez un exemple comment l'utiliser.

Une autre chose que vous trouveriez utile, si le produit * La version .Designer.cs n'est pas correct, au fond, la tâche GenerateResource est de ne pas appeler la version désirée de resgen.exe, paramètre de propriété SdkToolsPath pourrait vous aider.

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

Je ne suis pas tout à fait clair si vous voulez ce faire avant ou après la construction. Si vous en avez besoin fait quelque temps après Pass1 / PASS2, vous pouvez brancher directement dans les cibles. Essayez de regarder dans Microsoft.Build.Common.Targets pour avoir une idée de la façon de le faire.

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