pagratios Δημοσ. 18 Ιουνίου 2014 Δημοσ. 18 Ιουνίου 2014 Προσπαθώ να κάνω load ένα assembly από το σύστημα αν δεν βρει ένα όμοιο στο local folder κάνοντας χρήση του event AssemblyResolve. Ενώ όντως γίνονται load τα σωστά assembly δεν τρέχει η εφαρμογή. Τα αρχεία τα local και του συστήματος έχουν τα ίδια type αλλά δεν είναι τα ίδια αρχεία 100%. Αν στα reference βάλω τα local ή του συστήματος τρέχει η εφαρμογή κανονικά. Αλλά όπως είπα και παραπάνω αν έχω σε reference τα local και δεν τα βρει και κάνει load του συστήματος με την AssemblyResolve τότε δεν δίνει σωστά αποτελέσματα. Αν ξέρει κάποιος για πιο λόγο δεν παίζει ή αν δεν γίνεται να παίξει εφόσον τα αρχεία δεν είναι όμοια θα ήταν πολύτιμη η βοήθεια του.
defacer Δημοσ. 18 Ιουνίου 2014 Δημοσ. 18 Ιουνίου 2014 Τι εννοείς "δεν είναι τα ίδια αρχεία 100%"? Είναι κάποιο από τα assemblies strong named? Τα references είναι partial ή full? Ποιά είναι τα πλήρη ονόματα των assemblies που εμπλέκονται?
pagratios Δημοσ. 19 Ιουνίου 2014 Μέλος Δημοσ. 19 Ιουνίου 2014 Χρησιμοποιήσω το project UIAComWrapper για UI automation το οποίο αντικαθιστά το UIAutomation με τα ίδιο namespace System.Windows.Automation.Αυτό που έκανα είναι να ονομάσω το UIAComWrapper σε UIAutomationClient και να φτιάξω ένα project με το όνομα UIAutomationTypes στο οποίο έβαλα τα κατάλληλα αρχεία από το UIAComWrapper.Οπότε στο βασικά μου project χρησιμοποιώ τα αρχεία τα οποία έκανα δίχως πρόβλημα.Αυτό που κάνω είναι αν δεν βρει τα δικά μου αρχεία (ή καλύτερα αν τα δικά μου αρχεία δεν βρίσκουν εγκατεστημένο το UIautomation API v3.0 να κάνει κάνει Load τα UIAutomationClient και UIAutomationTypes τα οποία είναι στην global assembly cache και είναι strong name.Το θέμα είναι ότι το παραπάνω δεν πετάει σφάλμα απλά δεν εκτυπώνει τα αποτελέσματα που πρέπει. Ωστόσο αν έχω στα references τα UIAutomationClient και UIAutomationTypes του συστήματος τότε δεν έχει πρόβλημα. Ο developer του UIComWrapper έχει κάνει καλή δουλειά ώστε κάποιος που λειτουργούσε το UIAutomation της MS να συνεχίσει να λειτουργεί απλά αλλάζοντας το reference και κερδίζοντας τα extra που προσφέρει το UIAutomation API v3.0. Όμως η υλοποίηση είναι διαφορετική κάτι το οποίο δεν θα έπρεπε να παίζει ρόλο.Ελπίζω να κατάφερα να γίνω κατανοητός
defacer Δημοσ. 19 Ιουνίου 2014 Δημοσ. 19 Ιουνίου 2014 Άρα αν κατάλαβα καλά φορτώνεις επιτυχώς είτε τα UI automation assemblies από τη GAC είτε αυτά του UIAComWrapper, επιλέγοντας βάσει ενός κριτηρίου που για τις ανάγκες της συζήτησης είναι αδιάφορο. Και το πρόβλημα είναι πως ο κώδικάς σου χρησιμοποιώντας XYZ types από την εκάστοτε επιλεγμένη assembly δεν παράγει το ίδιο αποτέλεσμα και στις 2 περιπτώσεις. Αυτό μου ακούγεται απλώς σαν το UIAComWrapper να μην είναι 100% compatible drop-in replacement για τα assemblies στη GAC. Το οποίο είναι θέμα του UIAComWrapper (δεν ξέρω καν αν επιθυμεί να είναι 100% compatible drop-in replacement) και δεν έχει να κάνει με το δικό σου τμήμα της εφαρμογής. Κοινώς ατύχησες.
pagratios Δημοσ. 19 Ιουνίου 2014 Μέλος Δημοσ. 19 Ιουνίου 2014 Αν φορτωθούν από την GAC έχοντας τα σαν reference εξ αρχης λειτουγεί κανονικά ενώ αν το κάνω στο runtime μέσω ενός κριτηρίου τότε δεν βγάζει τα ίδια αποτελέσματα. Πιο συγκεκριμένα πρόσεξα ότι αν είναι δηλωμένα εξ αρχής τότε μαζί με το UIAutomationClient και UIAutomationTypes φορτώνει και τα UIAutomationProvider, UIAutomationClientsideProviders, Accessibility και System.Runtime.Remoting ενώ αν τα φορτώσω εγώ με την assemblyResolve τότε φορτώνει μόνο το UIAutomationProvider. Από την στιγμή που θα φορτώσεις ένα assembly αυτό δεν είναι υπέυθυνο για τα δικά του reference. Καταλαβαίνω στην αρχή είχα πρόβλημα γιατί το UIAComWrapper τα έχει όλα μαζί σε ένα project και η δική μου εφαρμοπγή τα αναζητούσε εκεί αλλά εφοόσον τα Types τα έβαλα σε άλλο project τότε σταμάτησαν τα σφάλματα. Όμως τώρα που πλέον του δίνω άλλο assembly εκείνο δεν πρέπει να φορτώσει τα assemblies που χρειάζεται? Ή προφανώς κάπου το έχω χάσει.
defacer Δημοσ. 19 Ιουνίου 2014 Δημοσ. 19 Ιουνίου 2014 Δε σε καταλαβαίνω 100% έτσι που τα λες αλλά γενικά τα assemblies που χρειάζονται τα φορτώνει το runtime όταν προκύψει από το jitter ότι θα χρειαστούν. Αν π.χ. έχεις μια method Foo() η οποία χρησιμοποιεί μέσα κάτι από μια class Bar, η assembly με την class Bar δε θα φορτωθεί αν το πρόγραμμά σου δεν καλέσει ποτέ τη Foo.
pagratios Δημοσ. 19 Ιουνίου 2014 Μέλος Δημοσ. 19 Ιουνίου 2014 (επεξεργασμένο) Σε ευχαριστώ για τις απαντήσεις σου. Απλά μου κάνει εντύπωση ενώ φορτώνω το UIAutomation από την GAC(όταν συμβεί το κριτήριο) γιατί εκείνο δεν φορτώνει αυτά που χρειάζεται. Επεξ/σία 19 Ιουνίου 2014 από pagratios
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα