Κατ'αρχήν να ευχαριστήσω όλους για τις διαφωτιστικές απαντήσεις που δόθηκαν. Ειναι πολύ χρήσιμο να γνωρίζεις τον τροπο με τον οποίο δουλεύουν οι συνάδελφοί σου σε παρόμοιες καταστάσεις.
Επειδή το πρώτο μου post ήταν λίγο "νευρικό", σκέφτομαι να συγκεκριμενοποιήσω λίγο τον τρόπο με τον οποίο εργάζομαι αυτή τη στιγμή για να δούμε αν λέμε τα ίδια πράγματα:
Στο sourcesafe λοιπόν υπάρχουν:
Ο κώδικας των components (καθε ένα στο δικό του project)
ΔΕΝ υπάρχουν compiled dlls
ΔΕΝ υπάρχουν solutions
Στο δικτυακό drive υπάρχουν:
Τα compiled dlls των components (το κάθε ξεχωριστό version σε δικό του subdir) - δεν αλλάζουμε version σε κάθε build, μόνο όταν αλλάξουν signatures - ουσιαστικά χρησιμοποιούμε 3-number versions εκ των οποίων αλλάζουμε συνήθως το μεσαίο. Παρακάμπτουμε την αλλαγή του τελευταίου αριθμού όταν μεταβληθεί το internal functionality για ευκολία.
Στα PC μας υπάρχουν:
Το project του tier στο οποίο δουλεύει ο καθένας μας.
Reference στο δικτυακό drive για τα υπόλοιπα components.
Τα υπόλοιπα components έχουν "κατέβει" τοπικά (ίδιες versions με αυτές που κάνουμε reference) και έχουν στηθεί στο τοπικό μηχανάκι. Το στήσιμο γίνεται από το τοπικό μηχανάκι στο τοπικό μηχανάκι και όχι από com+.
Δεν υπάρχει συμφωνία στα local directories που χρησιμοποιεί ο καθένας μας αλλά μόνο στο που κανουμε reference (στο δικτυακό drive). Ετσι οποιος και να κατεβάσει από sourcesafe έχει τα ίδια references.
Ολα τα references που αφορούν σε com+ είναι file references.
Δεν δουλεύουμε με stubs μια και κάνουμε debug ο καθενας στο μηχάνημά του.
Ολα τα μηχανάκια έχουν ίδιο λειτουργικό.
Θα ήθελα, στη μέχρι τώρα περιγραφή, να μου υποδείξετε, ο καθένας με την προσωπική του εμπειρία, που θα μπορούσα να βελτιώσω την κατάσταση, ή, τι πιθανόν να γίνεται λανθασμένα.
Αυτό μέχρι τώρα.
Ανέλαβα λοιπον πρόσφατα κάτι το οποίο απαιτούσε να δουλεψω προσωπικά σε πολλά tiers ταυτόχρονα. Ετσι, πήρα όλα τα com+ στο μηχανάκι μου (από το sourcesafe το source, compile & στήσιμο τοπικά), κράτησα τα references στο δικτυακό και επιχείρησα να δουλεψω.
Αυτό που έκανα για να επιταχύνω την κατάσταση κάθε φορά που έκανα build ήταν ένα batch το οποίο ξέστηνε/ξανάστηνε στο com+ τα πράγματα, έκανε register GAC με force install και αντέγραφε τα καινούρια components στο δικτυακό drive ωστε να παίζουν τα references και πάλι. Κατόπιν, σε όποιο project εργαζόμουν, χρησιμοποιούσα ένα macro για να κάνω refresh τα references (το οποίο δουλεύει πολύ καλά και δεν χρειαζόταν να κλείνω και να ξανανοίγω το studio).
[Απόπειρα 1]
Δυστυχώς όμως δεν μπορούσα να κάνω σωστά debug. Symbols δεν φορτώνονταν, γιατί όποτε έκανα attach to process (dllhost) κάποιο component και παταγα "play", προφανώς δεν συμφωνούσαν τα symbols που παράγονταν εκείνη την ώρα με αυτά που έκανα reference από το δικτυακό drive. (Δεν θυμάμαι, μπορεί και να μην αντέγραφα τα tlb αρχεία εκεί!!!). Ερώτηση λοιπον: Θεωρητικά, αν αντιγράφονται σωστά τα tlb αρχεία, έστω και αν παράγονται καινούρια την ώρα που πατάς το αναθεματισμένο "play", δεν πρέπει να φορτωθούν τα symbols από το δικτυακό drive? Αν η απάντηση είναι ναι, τότε είμαι κοντά στην αιτία του προβλήματός μου.
[Απόπειρα 2]
Ειπα λοιπον να αλλάξω τροπάρι και φτύνω τα references στο δικτυακό drive. Project references λοιπον με ενιαίο solution για τα πάντα. Configuration manager, ενα configuration για τα components, ένα για το application (winforms) που τα χρησιμοποιεί, ένα για τα nUnit tests (πρωτόγονα). Χτιζω, τρέχω το batch (χωρίς να κάνει πλέον copy στο δικτυακό), προσπαθώ να κάνω debug. Οκ μέχρι εδώ. Αλλα!!!! Κατι πάντα κλειδώνει κάτι άλλο και δεν μπορούν να γραφτούν όλα στο δίσκο όταν χτίζω....
[Απόπειρα 3]
Ξεχωριστά λοιπόν solutions με file references μεταξύ των components. Εδώ το απόλυτο χάος! Πότε symbols δεν φορτώνονται, πότε dlls δεν μπορούν να γραφτούν....όλα τοπικά, δεν υπάρχει δικτυακό drive
και ερωτώ:
Ποιά η πιό ασφαλής μέθοδος; Εγώ βλέπω οτι η μέθοδος των references σε δικτυακό drive (προσοχή, μόνο references, όχι στήσιμο των components από εκεί!) είναι πιό ασφαλής. Τι κάνετε εσείς; Η τεχνογνωσία σας σε αυτό είναι πολύτιμη.
Σωτήρης Φιλιππίδης
DotSee Web Services