Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως θα πάρω το path ενός φακέλου που βρίσκεται μέσα σε ένα dll assembly??

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος anjelinio στις 15-07-2009, 15:34. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-07-2009, 16:49 52469

    Πως θα πάρω το path ενός φακέλου που βρίσκεται μέσα σε ένα dll assembly??

    Έχω φτιάξει ένα custom control. Εκεί μέσα έχω ένα φάκελο που έχει μέσα διάφορα αρχεία χρήσιμα. Πως μπορώ να "διαβάσω" το dll και να "πάρω" το path του φακέλου;

    EDIT: Εάν "πάρω" το φάκελο τα αρχεία που είναι μέσα του θα είναι διαθέσιμα ή όχι;
  •  15-07-2009, 15:34 52505 σε απάντηση της 52469

    Απ: Πως θα πάρω το path ενός φακέλου που βρίσκεται μέσα σε ένα dll assembly??

    Εφ' όσον έχεις μαρκάρει τα χρήσιμα αρχεία σου κατα το compile ως Embedded Resource, μπορείς να τα πάρεις απο το Assembly class, ως manifest Resource Stream -> σου επιστρέφει ένα stream με λίγα λόγια.

    Π.χ. :

    Έχω ένα class library project, το namespace του οποίου είναι MyProject.MyHelperObjects. Μέσα σε αυτό, έχω ένα folder "Resources" που μέσα έχει ένα αρχείο MyUsefulFile.xml.

    Στον κώδικά σου, αν πάρεις ένα reference στο εν λόγω αρχείο, μπορείς με τη μέθοδο GetManifestResourceStream(string path) να πάρεις πίσω ένα stream με τα περιεχόμενα του αρχείου σου - όπως αν το διάβαζες απο δίσκο.

    Στον κώδικα παρακάτω που είχα πρόχειρο το χρησιμοποιώ μέσα απο το ίδιο το assembly:

    Assembly.GetExecutingAssembly().GetManifestResourceStream("MyProject.MyHelperObjects.Resources.MyUsefulFile.xml");

    Η γραμμή παραπάνω θα σου επιστρέψει ένα Stream instance.

    Αν θές να διαβάσεις κάτι απο κάποιο εξωτερικό assembly, πρέπει πρώτα να φορτώσεις το assembly ( αν δεν είναι ήδη στη μνήμη ) χρησιμοποιώντας μια απο τις αντίστοιχες static μεθόδους του assembly class, π.χ. Load, GetAssembly, LoadFromFile, LoadFrom, LoadWithPartialName κτλ. Αφού πάρει πίσω το Assembly instance, καλείς πάλι το GetManifestResourceStream και παίρνεις πίσω το stream σου.

    Ο γενικός κανόνας για το πως προκύπτει το path είναι ... το default namespace του class library, συν το path απο το root του project σου μέχρι το αρχείο, μαζί με το extention. Έτσι στο παραπάνω παράδειγμα είναι MyProject.MyHelperObjects + Resources.MyUsefulFile.xml

    Προσοχή στο ότι δεν είναι "path", με slashes, είναι σε namespace μορφή, με τελείες ! Και φυσικά στο ότι τα αρχεία είναι δηλωμένα ως embedded resources ( απο το properties το βλέπεις αυτό ).

    Happy embedded resource-ing  ! Smile

    Υ.Γ. Δεν μπορείς να "πάρεις" το folder. Μόνο τα αρχεία, by full name ! Αν θες να δείς τη λίστα με τα embedded αρχεία, το Assembly class έχει πάλι τις ανάλογες μεθόδους, που σου επιστρέφουν τα ονόματα [assembly paths] όλων των embedded αρχείων [resources].


    Angel
    O:]
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems