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 :

Ressource incorporé non inclus dans l'assembly


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut Ressource incorporé non inclus dans l'assembly
    Bonjour,


    Je suis le tutorial suivant afin d'ajouter à mon EXE toute les DLL de mon projet
    http://www.digitallycreated.net/Blog...pf-application


    J'ai, à la racine de mon EXE, un dossier nommée "Resources" qui contient 4 DLL perso, toutes avec une "Action de génération : Resource".

    Je compile le tout sans problème mais lorsque j'utilise ILSpy pour voir ce que contient mon EXE je ne retrouve pas l'une de mes DLL (nommée "Tagomatique.DA.dll") ce qui génére des erreurs lors de la phase de résolution d'assembly.

    Voici le code utilisée pour la résolution d'assemble (celui du tuto + génération de trace)
    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
    private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
    {
        Assembly executingAssembly = Assembly.GetExecutingAssembly();
        AssemblyName assemblyName = new AssemblyName(args.Name);
     
        string path = assemblyName.Name + ".dll";
        if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false)
        {
            path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);
        }
     
        File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine);
        File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "Args.Name = " + args.Name);
        File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "AssemblyName = " + assemblyName);
        File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "AssemblyName.CultureInfo = " + assemblyName.CultureInfo.DisplayName);
        File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "Path = " + path);
     
        using (Stream stream = executingAssembly.GetManifestResourceStream(path))
        {
            if (stream == null)
            {
                File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "Resultat = INTROUVABLE");
                return null;
            }
            else
            {
                File.AppendAllText(@"C:\log.tago.txt", Environment.NewLine + "Resultat = OK");
            }
     
            byte[] assemblyRawBytes = new byte[stream.Length];
            stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
            return Assembly.Load(assemblyRawBytes);
        }
    }

    Extrait du fichier de trace en rapport avec la DLL manquante:
    Args.Name = Tagomatique.DA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    AssemblyName = Tagomatique.DA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    AssemblyName.CultureInfo = Langue indifférente (Pays indifférent)
    Path = Tagomatique.DA.dll
    Resultat = INTROUVABLE

    Ce qui me surprend c'est que mes 3 autres DLL sont identiques (référeces croisées et autre) et ne vois aucune différence qui géné l'intégration de cette DLL dans l'EXE final.

    Je vous remercie par avence pour votre aide,

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    Voici un aperçu de la structure de mon projet dans l'explorateur de solution



    Je viens de remarquer quelque chose qui pourrais peut-être aider certains a comprendre l'origine du problème.

    Dans le dossier bin/Debug de mon assembly principal (EXE) j'ai tous les éléments de mon projet ainsi qu'un dossier nommée "DA" qui contient une DLL nommée "Tagomatique.resources.dll".

    D'après ILSpy cette dll contient ma DLL DA (après vérification c'est bien elle!!)

    Bizarrement c'est cette même DLL qui n'est pas correctement intégré à mon EXE néanmoins elle ne contient rien de spécial (aucun contenu dépendant de la culture)

    Aperçut de mon bin/Debug


    Aperçut du dossier bin/Debug/DA



    Comment ce fait-il qu'avec les mêmes réglages une partie de mes DLL soit intégré directement dans mon EXE alors qu'une autre est placer dans un fichier de ressources de mon EXE?

    Le poids de mon EXE est de 159Ko (EXE + 3 DLL)
    La DLL non intégré fait 21Ko

    Il semble donc que la taille ne soit pas excessive

Discussions similaires

  1. [Flex4] Valeur non incluse dans listes déroulantes
    Par granchef dans le forum Flex
    Réponses: 3
    Dernier message: 06/07/2013, 17h08
  2. Afficher une image d'un dossier non inclus dans Apache
    Par Thordax dans le forum Langage
    Réponses: 1
    Dernier message: 07/06/2010, 21h38
  3. HtmlUnit : remplir des champs non inclus dans un formulaire
    Par lahmar.abdel1 dans le forum Général Java
    Réponses: 0
    Dernier message: 12/05/2009, 11h31
  4. Réponses: 1
    Dernier message: 06/02/2008, 10h41
  5. Réponses: 1
    Dernier message: 03/03/2007, 12h28

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