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

 .NET Discussion :

Ajouter une référence


Sujet :

.NET

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Ajouter une référence
    Bonjour,

    Et comment ça se passe pour les types propriétaires et les propriétés ?

    Par exemple, je veux intégrer fastzip (ICSharpCode.SharpZipLib.dll).
    J'utilise, pour décompresser, 2 fonctions que j'ai importées.
    Mais il y a un autre élément (ZipEntry) qui est juste un conteneur et qui possède des propriétés.

    Bref, ce code ne fonctionne pas sans la DLL, comment faire ?
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    using ICSharpCode.SharpZipLib.Checksums;
    using System.Runtime.InteropServices; // Pour inclure les DLL (P/Invoke)
     
    namespace ExtraireZip {
        class Program {
     
            [DllImport("ICSharpCode.SharpZipLib")]
            static extern int Read(
                    byte[] buffer,
                    int offest,
                    int count
                );
     
            [DllImport("ICSharpCode.SharpZipLib")]
            static extern ZipEntry GetNextEntry();
     
            static void Main(string[] args) {
                string msgErr = "";
                string pathModule = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
                pathModule = (pathModule[pathModule.Length-1] != Path.DirectorySeparatorChar) ? pathModule + Path.DirectorySeparatorChar : pathModule;
                if ((args.Length > 0)) {
                    if (File.Exists(args[0])) {
                        decompresserRep(args[0], pathModule);
                    }
                }
            }
     
            static string decompresserRep(string InputPathOfZipFile, string repDestination) {
                string msgErr = "";
                try {
                    if (File.Exists(InputPathOfZipFile)) {
                        repDestination = (repDestination.EndsWith("\\")) ? repDestination.Remove(repDestination.Length - 1, 1) : repDestination; // Enlever l'antiSlash final
                        using (ZipInputStream ZipStream = new ZipInputStream(File.OpenRead(InputPathOfZipFile))) {
                            ZipEntry theEntry;
                            while ((theEntry = ZipStream.GetNextEntry()) != null) {
                                if (theEntry.IsFile) {
                                    if (theEntry.Name != "") {
                                        string strNewFile = @"" + repDestination + @"\" + theEntry.Name;
                                        if (File.Exists(strNewFile)) {
                                            continue;
                                        }
                                        if (!Directory.Exists(Path.GetDirectoryName(strNewFile))) {
                                            Directory.CreateDirectory(Path.GetDirectoryName(strNewFile));
                                        }
                                        using (FileStream streamWriter = File.Create(strNewFile)) {
                                            int size = 2048;
                                            byte[] data = new byte[2048];
                                            while (true) {
                                                size = ZipStream.Read(data, 0, data.Length);
                                                if (size > 0)
                                                    streamWriter.Write(data, 0, size);
                                                else
                                                    break;
                                            }
                                            streamWriter.Close();
                                        }
                                    }
                                } else if (theEntry.IsDirectory) {
                                    string strNewDirectory = @"" + repDestination + @"\" + theEntry.Name;
                                    if (!Directory.Exists(strNewDirectory)) {
                                        Directory.CreateDirectory(strNewDirectory);
                                    }
                                }
                            }
                            ZipStream.Close();
                        }
                    }
                } catch (Exception ex) {
                    msgErr = ex.Message; //  +" (" + ex.StackTrace + ").";
                }
                return msgErr;
            }
        }
    }
    Lorsque je l’exécute en autarcie, il plante, je pense que ça vient des theEntry.IsFile et autres.

    Pouvez vous m'aider ?

    Merci d'avance.

    David.
    David.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Pour le coup, SharpZipLib est une dll DotNet, il ne faut donc pas utiliser de P/Invoke

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Étrangement, si j'isole mon exe, il me fait un message d'erreur.

    Un truc générique du genre "A rencontré une erreur et doit fermer".

    Aurai-je oublié quelque chose ?

    Il y a l'intégralité de mon source dans le post ci-dessus. C'est un projet console.
    David.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Que ca plante quand la dll n'est pas présenter -> c'est normal
    Et je me répète: SharpZipLib n'est pas une DLL non managé, il n'y a aucun interet à utiliser le P/Invoke: il faut utiliser une référence standard.

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Donc, il n'y a aucun moyen de faire un exe autonome avec cette lib... C'est bien ça ?

    Je ne sais pas ce que tu entends par "la dll n'est pas présenter".
    J'ai fait "Ajouter une référence"/Parcourir/ et j'ai été chercher ma DLL, c'est tout.
    David.

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Si tu as utilisé "Ajouter une référence" alors il ne faut pas utiliser le P/Invoke.
    Regarde la doc de SharpZipLib pour apprendre à t'en servir correctement.

    De plus qu'appelles tu "faire un exe autonome"? Si c'est un .exe qui inclue les dlls alors c'est très très difficilement possible.

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je veux faire un exe autonome qui s'appuie sur le Framework, bien sur.
    J'entendais juste encapsuler les DLL qui doivent se balader avec l'appli.

    En faisant une référence, je n'ai pas vu de "SharpZipLib", ni de "ICSharpCode" dans la liste de l'onglet ".NET".
    J'ai du faire un "Parcourir..." et aller cherche une DLL que je j'ai téléchargée.
    Elle n'est donc pas dans le framework.

    Sur le site officiel, ils proposent de télécharger les assemblies... C'est quelque chose qui la mettra dans le GAC ?
    Si oui, il faudra le faire sur chaque PC qui utilisera mon exe ? ...Ce n'est pas ce que je veux.

    En clair, tu me dis qu'elle n'est pas dans la Framework et que je ne peux pas faire d'Invoke... Donc je suis obligé de la faire se balader avec mon appli ? ...Ca me surprend.
    David.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Ben c'est un peu le principe de toutes les dll. D'ou l'utilité d'utiliser un installeur pour déployer une application.
    D'ailleurs pour un P/Invoke la librairie a aussi besoin d'être présente à coté de l'executable.

    Soit tes utilisateurs installent la librairie dans le GAC, soit tu fournis la librairie dans le même repertoire que ton exe. Ca marche comme ca pour toutes les applis .Net (et bien souvent toutes les applis)

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Pas glop...

    Je sort d'un environnement Delphi ou il sait faire des Exe complétement autonome sans que le développeur ait quoi que ce soit à faire.
    C'est à dire que maintenant, tous les petits utilitaires qu'on pourra trouver sur des sites à la "télécharger.com" nécessiterons une installation. Je trouve que c'est une régression.

    Bref, c'est juste un avis. Je ne vais pas refaire DotNet.

    Merci pour tes informations Nathanaël.

    David.
    David.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Je vois pas en quoi les programmes en .NET nécessitent une installation, c'est plus pour que ce soit plus pratique.

    Si tu fais un zip avec ton exe et tes dll et que le mec les dézip dans un même répertoire ça fonctionne aussi hein

    Le seul soucis quand tu utilises des libs externes, c'est qu'elles sont externes et c'est donc normal qu'elles ne soient pas intégrées à ton exe :p
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  11. #11
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Oui, certes, ce n'est pas la mort... C'est juste une question esthétique et d'organisation.
    Par exemple, il m'arrive que mes applis fassent appel à des exe que j'avais l'habitude de mettre ensemble (voire, à la racine de l'appli), du coup, c'est plein de DLL et on ne sais plus laquelle est liée à quel exe.

    C'était un confort que j'avais pris pour acquis.
    David.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ajouter une référence
    Par Invité dans le forum Access
    Réponses: 4
    Dernier message: 18/01/2007, 14h26
  2. Dois-je ajouter une référence en particulier
    Par Soph70 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2006, 03h12
  3. Ajouter une référence
    Par Neuromancien2 dans le forum Access
    Réponses: 2
    Dernier message: 18/07/2006, 16h28
  4. Ajouter une référence dans un runtime
    Par rogger dans le forum Runtime
    Réponses: 13
    Dernier message: 07/12/2005, 17h20

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