IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Générateur de code


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut Générateur de code
    Bonjour

    Je m'interroge sur l'intégration direct d'un générateur de code au moment de la compilation sous Visual Studio 2010.

    Je ne viens pas ici pour vous demander comment je peux traduire mon fichier perso en code c#... ça c'est mon problème

    Mais comment faire quand on intègre un fichier texte particulier au sein de son projet VS... que celui-ci le traduit directement en mon code désiré... à la compilation... où encore mieux au moment de l'IntelliSense ?

    Bon... partons d'un exemple ultra simple pour être clair :

    J'ai une fonction qui pour un fichier texte en entrée va lire les premiers caractères valides composée uniquement de lettres.... et en créer une classe portant le nom du fichier et une méthode nommée par les caractères.


    Voila j'ai donc dans mon projet
    +-- program.cs
    +-- montest.monextension
    | +-- montest.monextension.cs (créé automatiquement) Mais comment faire ça !?

    Et si par exemple j'ai la chaine "toto" dans mon fichier "montest.monextension"

    Je voudrais pouvoir écrire dans le "main"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var test = new Montest();
    test.Toto();
    ... et que ça marche !

    Comment faire ça... je trouve rien sur le sujet !

    Pourtant XAML existe... et XNA a un truc "presque" similaire pour la lecture des shaders... oui je dis bien "presque"...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il y a plus simple... ça existe déjà dans Visual Studio, ça s'appelle T4

    Il y a des tutos à ce sujet qui ont été publiés récemment
    http://kperriat.developpez.com/tutor.../templates-t4/

    Exemple bidon :

    Program.tt (template T4) :
    Code T4 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <#@ template debug="false" hostspecific="true" language="C#" #>
    <#@ output extension=".cs" #>
    <#@ import namespace="System.IO" #>
    using System;
    namespace TestT4
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    <#
    			string inputFile = Host.ResolvePath("input.txt");
    			using (var reader = File.OpenText(inputFile))
    			{
    				string line;
    				while((line = reader.ReadLine()) != null)
    				{
    #>
    			Console.WriteLine("<#= line #>");
    <#
    				}
    			}
    #>
    		}
    	}
    }

    input.txt (fichier d'entrée) :

    Program.cs (résultat du template) :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System;
    namespace TestT4
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Console.WriteLine("hello");
    			Console.WriteLine("world");
    		}
    	}
    }

    Le template est rééxécuté (et donc le fichier de sortie regénéré) à chaque fois que tu l'enregistres. Tu peux aussi l'exécuter manuellement en faisant clic droit, "Run custom tool".

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Merci pour l'exemple ça marche super bien !

    ... seulement non ce n'est pas plus "simple" bien au contraire ça complexifie tout... pour l'utilisateur qui n'aurait pas à toucher au template mais uniquement aux fichiers à "templater".

    Parce que là il n'y a pas beaucoup de différence avec un générateur de code externe à VS que je lancerai à chaque fois pour régénérer au minimum une dizaine de fichiers de mon type particulier.

    Je souhaiterai surtout paramétrer correctement la propriété "Outil personnalisé" de mes fichiers perso inclus dans un projet pour que ceux-ci soient traduit en code automatiquement lors d'une modification de mes fichiers perso - le générateur/template lui n'aura normalement jamais à être modifié.

    -----------------

    Pour être plus précis... j'en ai marre de pixel/vertex shader et de leur non intégration forte via un typage fort ! Exemple tout con : Si j'ai une variable "float4x4 World42" dans un fichier ".fx" et bien en tant qu'utilisateur je veux le savoir sans ouvrir ce fichier... et surtout ne pas découvrir au lancement que je me suis p'être trompé de nom ou de type !!!

    D'où un générateur de code m'encapsulant tout ça dans une classe... ainsi adieu les "effect.Parameters["Matrix43"].SetValue()" !

    D'ailleurs je ne comprends absolument pas pourquoi cela n'existe pas déjà

    -----------------

    Sinon je souhaiterai aussi rajouter un mot clé à C#... un peu à la manière du foreach et du await/async générateur de code... mais là ça ne doit pas être possible hélas.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je ne comprends pas bien ce qui te gêne... c'est le fait que le template ne soit pas réexécuté automatiquement à la compilation ? Tu peux toujours ajouter un script qui exécute TextTransform.exe (*) avant la compilation (dans les évènements de build, dans les propriétés du projet)

    (*) chez moi ça se trouve ici :
    C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\10.0

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne comprends pas bien ce qui te gêne... c'est le fait que le template ne soit pas réexécuté automatiquement à la compilation ? Tu peux toujours ajouter un script qui exécute TextTransform.exe (*) avant la compilation (dans les évènements de build, dans les propriétés du projet
    Oui c'est pas bête... mais ça reste de la "bidouille" alors que la propriété "outil personnalisé" est parfaitement fait pour.

    D'ailleurs j'ai réussi et c'est mieux ... passé outre l'histoire de COM, Guid, base de Registres et Global Assembly Cache...

    Citation Envoyé par ijk-ref Voir le message
    (...) D'où un générateur de code m'encapsulant tout ça dans une classe... ainsi adieu les "effect.Parameters["Matrix43"].SetValue()" !

    D'ailleurs je ne comprends absolument pas pourquoi cela n'existe pas déjà
    Faut te réveiller mon gars. Ca existe déjà !

    http://effectgenerator.codeplex.com/

Discussions similaires

  1. [andromda]Infos sur andromda, générateur de code JAVA
    Par ugos dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 08/09/2009, 15h30
  2. [Sunopsis] et les ETL générateur de code ?
    Par manuaccess10 dans le forum ODI (ex-Sunopsis)
    Réponses: 5
    Dernier message: 20/12/2006, 12h54
  3. Générateur de code
    Par jojo. dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 21/04/2006, 10h24
  4. Réponses: 4
    Dernier message: 21/02/2006, 19h45
  5. [Info][API]Générateur de code
    Par Archangelo dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 24/07/2005, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo