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 :

interpretation et compilation a chaud


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 7
    Points
    7
    Par défaut interpretation et compilation a chaud
    Bonjour,

    Je recherche un exemple de code ou le programme (en cours d'execution) permet de taper du code c# puis le compile et l'execute (dans la limite de specs particulieres bien evidemment, surement sous forme de plugin).
    Je suis sur que ca existe mais je n'arrive pas a trouver les bons mots cles pour cette recherche!

    Merci de votre aide!

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Fait une recherche sur la compilation de code en C#. Sur le forum ou google tu trouveras vite une réponse.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    sur le coup, je ne trouve pas google tres bavard...

    j'essaie de faire le tour de tout ce qui est plugin architecture, mais je ne vois pas d'exemple ou on peut taper le code a chaud, ce qui cree ensuite le plugin..

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Algérie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 73
    Points
    73
    Par défaut Voici un exemple!!
    Pour l'exécution dynamique ...voici un exemple ou j'exécute un (lcCode) créé dynamiquement ...

    l'exemple est juste pour te faire voir l'application des principes... mais pour en faire d'une bonne manière je te conseille vivement de te documenter sur le sujet ...
    J'ai fait ce code pour exécuter du linq génére dynamiquement et ce que je peux te dire c'est que c'est à s'arracher les cheveux dans le debug...

    Code : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    lcCode = @"
    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.Data;
     
    namespace ImportData {
    public class GetUpdatedTable {
     
    public DataTable RunDynamicLinq(string ForeignKey, DataTable SourceTable, DataTable ForeignTable, DataTable ToInsertTable, List<Map> toInsertMapList) {
    " + lcCode +
    @"}   
    }    
    }";
     
                RunCodeText rc = new RunCodeText();
                // rc.DynamicCode(dt, mapList);
                CSharpCodeProvider cp = new CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v3.5" } });
                ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler();
                CompilerParameters loParameters = new CompilerParameters();
     
                // *** Start by adding any referenced assemblies
                loParameters.ReferencedAssemblies.Add("System.dll");
                loParameters.ReferencedAssemblies.Add("mscorlib.dll");
                loParameters.ReferencedAssemblies.Add("System.Core.dll");
                loParameters.ReferencedAssemblies.Add("System.Xml.dll");
                loParameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
                loParameters.ReferencedAssemblies.Add("System.Data.dll");
     
                loParameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
                // *** Load the resulting assembly into memory
                loParameters.GenerateInMemory = true;
     
                // *** Now compile the whole thing
                CompilerResults loCompiled = cp.CompileAssemblyFromSource(loParameters, lcCode);
     
                if (loCompiled.Errors.HasErrors)
                {
                    string lcErrorMsg = "";
     
                    // *** Create Error String
                    lcErrorMsg = loCompiled.Errors.Count.ToString() + " Errors:";
                    for (int x = 0; x < loCompiled.Errors.Count; x++)
                        lcErrorMsg = lcErrorMsg + "\r\nLine: " + loCompiled.Errors[x].Line.ToString() + " - " +
                            loCompiled.Errors[x].ErrorText;
     
                    MessageBox.Show(lcErrorMsg + "\r\n\r\n" + lcCode, "Compiler Demo", MessageBoxButtons.OK, MessageBoxIcon.Error);
     
                    //return;
                }
     
                //this.txtAssemblyCode.Text = lcCode;
     
                Assembly loAssembly = loCompiled.CompiledAssembly;
     
                // *** Retrieve an object reference - since this object is 'dynamic' we can't explicitly            // *** type it so it's of type Object
                object loObject = loAssembly.CreateInstance("ImportData.GetUpdatedTable");
                //if (loObject == null) à traiter comme exception
                //{
                //    //MessageBox.Show("Couldn't load class.");
                //    return;
                //}
     
                object[] loCodeParms = new object[5];
                loCodeParms[0] = ForeignKey;
                loCodeParms[1] = SourceTable;
                loCodeParms[2] = ForeignTable;
                loCodeParms[3] = DestinationTable;
                loCodeParms[4] = toInsertMapList;
     
     
                try
                {
                    object loResult = loObject.GetType().InvokeMember("RunDynamicLinq",
                    BindingFlags.InvokeMethod, null, loObject, loCodeParms);
     
                    DataTable outTable = (DataTable)loResult;
                    return outTable;
                    // MessageBox.Show("Method Call Result:\r\n\r\n" + outTable.Rows.Count, "Compiler Demo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception loError)
                {
                    // MessageBox.Show(loError.Message, "Compiler Demo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                return null;
    Hope it helps ..
    bon courage.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    merci je vais étudier tout ca !

    D'ailleurs, y a t il un moyen de débugger saisi dans le programme? Je me doute que là, ca devient assez tiré par les cheveux

Discussions similaires

  1. compilation interpretation "automatique"
    Par Torx26 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 10/04/2011, 20h52
  2. Compilation des JSP à chaud
    Par MASSAKA dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 05/11/2008, 14h19
  3. dans le fond, la compilation...
    Par deltapositive dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/09/2002, 12h14
  4. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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