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 :

Insertion et utilisations de ressources avec CodeDom


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut Insertion et utilisations de ressources avec CodeDom
    Bonjour a tous,

    je suis actuellement sur la réalisation d'une application d'automatisation (une sorte d'installeur) afin de déployer des fichiers sur l'ensemble des posts de mon réseau.
    Pour cela j'utilise CodeDom et je génère un executable contenant les fichiers a copier sur le disque du client. Cependant j'ai un soucis avec le code généré:

    Comment faire dans le code principal, pour copier la ressource sur le disque dur, et comment l'appeler.

    Actuellement j'en suis a ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // déclaration de la ressource (cp pour mon CodeDom.CompilerParameters) et ou ressource est le chemin absolu du fichier a intégrer dans mon assembly
    cp.EmbeddedResources.Add(ressource);
    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
    // Code généré pour être compilé par codeDom
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
     
    namespace compiledProject
    {
        class Program
        {
            static void Main(string[] args)
            {
    File.WriteAllBytes(@"d:\rab8gh.flv", compiledProject.Resources.rab8gh);
            }
        }
    }
    A noter que j'utilise donc compiledProject.Resources (où compiledProject est le nom de mon namespace)

    Erreur retournée par le compilateur C#:
    c:\Users\Shadow\Desktop\Test\testProj\testProj.cs(12,58) : error CS0234: Le type ou le nom d'espace de noms 'Resources' n'existe pas dans l'espace de noms 'compiledProject' (une référence d'assembly est-elle manquante*?)


    Si quelqu'un a des notions sur l'utilisation de CodeDom et peut m'aider a résoudre ce petit soucis ca m'aiderai grandement!

    Merci d'avance,

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    Un essai fait avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.WriteAllBytes(@"d:\rab8gh.flv", Properties.Resources.rab8gh);
    mais idem, le namespace n'existe pas

    a noter aussi que la ressource doit bien être imbriqué dans l'exe, car si on enlève le code ci dessus la compilation se fait et l'exécutable pèse plus (logique^^). le problème vient donc bien de cet appel depuis le fichier compilé par codedom

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Bonsoir

    En lisant ton poste, je me suis rappelé que j'avais, sur ce forum, il y a déjà plus de deux ans, donné un exemple d'utilisation de CodeDom.

    Ici : http://www.developpez.net/forums/d47...ion-dynamique/

    Si tu regarde bien l'exemple, il y a un ajout de namespace.

    Peut être cela répond-il à ton problème.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    hmm, j'en fais un aussi :s, en utilisant reflector j'ai vu que ma class est bien dans le bon namespace mais les ressources dans un dossier a part, ca vient peut-etre de la...

    la question est de savoir commment dire a codedom de les intégrer au namespace.

    Cf: ci joint le code de la méthode de compilation
    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
     public List<string> compile(string srcFile, string outFile, List<string> ressources = null)
            {
                //valeur de retour
                List<string> compilationsErrors = new List<string>();
     
                //Création de la racine de notre "arbre CodeDOM"
                CodeCompileUnit codeBase = new CodeCompileUnit();
                //Création de l'espace de noms
                CodeNamespace nameSpace = new CodeNamespace("compiledProject");
                //Ajout de l'espace de noms dans l'arbre
                codeBase.Namespaces.Add(nameSpace);
     
                //On définit les options de génération de code
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                //On demande a ce que le code généré soit dans le même ordre que le code inséré
                options.VerbatimOrder = true;
                options.BracingStyle = "C";
     
                //On demande la génération proprement dite            
                CSharpCodeProvider provider = new CSharpCodeProvider();
     
                CompilerParameters cp = new CompilerParameters();
                cp.GenerateExecutable = true;
                cp.OutputAssembly = outFile;
                cp.ReferencedAssemblies.Add("System.dll");
                cp.GenerateInMemory = false;
                cp.WarningLevel = 3;
                cp.TreatWarningsAsErrors = false;
                cp.CompilerOptions = "/optimize";
     
                // point d'entrée
                if (provider.Supports(GeneratorSupport.EntryPointMethod))
                {
                    // Specify the class that contains 
                    // the main method of the executable.
                    cp.MainClass = "compiledProject.Program";
                }
     
     
                // gestion des fichiers ressources
                if (ressources.Count > 0)
                {
                    provider.Supports(GeneratorSupport.Resources);
                    foreach (string ressource in ressources)
                    {
                        cp.EmbeddedResources.Add(ressource);
                    }
                }
     
                // compilation
                CompilerResults cr = provider.CompileAssemblyFromFile(cp, srcFile);
     
                if (cr.Errors.Count > 0)
                {
                    // afficher les erreurs de code
                    foreach (CompilerError err in cr.Errors)
                    {
                        // traitement de chaque erreur
                        compilationsErrors.Add(err.ToString());
                    }
                }
     
                return compilationsErrors;
            }

Discussions similaires

  1. Créer et utiliser une librairie avec ressource
    Par La March dans le forum Android
    Réponses: 0
    Dernier message: 24/06/2014, 17h20
  2. Problème fichier ressource avec insertion de son WAV
    Par Monromero1 dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2010, 15h42
  3. Utilisation d'un fichier ressources avec Delphi 2010 ?
    Par Laskar dans le forum Débuter
    Réponses: 8
    Dernier message: 20/10/2010, 09h18
  4. Utilisation de ressources images
    Par bebeours dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/09/2002, 14h33
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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