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

 

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

Καλύτερη οργάνωση των solutions και relative references

Îåêßíçóå áðü ôï ìÝëïò Πέτρος Αμοιρίδης. Τελευταία δημοσίευση από το μέλος sakis_drm στις 07-08-2009, 21:40. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-09-2007, 15:39 35099

    Καλύτερη οργάνωση των solutions και relative references

    Καλησπέρα παιδιά,

    Θα ήθελα να με βοηθήσετε με την εμπειρία σας ως προς το πως είναι καλύτερο να οργανωθεί η δομή των φακέλων ενός solution. Θα σας εξηγήσω λίγο τη λογική που ακολουθώ και αν μπορείτε να τη σχολιάσετε ή να προτείνετε άλλα πράγματα θα σας είμαι ευγνώμων.

    Κάθε προϊόν που αναπτύσσουμε μπορεί να αποτελείται από διάφορα επιμέρους projects. Το προϊόν θεωρώ ότι είναι το solution. Έτσι για παράδειγμα έστω ότι έχουμε ένα προϊόν SuperProduct. Αυτό έχει τρία projects:
    • SuperProduct Configuration Manager
    • SuperProduct Desktop
    • SuperProduct Web Services
    Χρησιμοποιώ το Subversion και θέλω όλο το solution (προϊόν) να βρίσκεται μέσα ώστε αν κάποιος το κατεβάσει (check out) σε έναν καινούριο development υπολογιστή, να μπορεί να κάνει Rebuild All δίχως κανένα πρόβλημα. Αρκεί ο υπολογιστής να έχει το Visual Studio εγκατεστημένο. Για να το πετύχω αυτό, κρατώ την παρακάτω δομή:

    \SuperProduct
    \SuperProduct\SuperProduct.sln
    \SuperProduct\Configuration Manager
    \SuperProduct\Configuration Manager.csproj
    \SuperProduct\[Other files]
    \SuperProduct\Desktop
    \SuperProduct\Desktop.csproj
    \SuperProduct\[Other files]
    \SuperProduct\Web Services
    \SuperProduct\Web Services.csproj
    \SuperProduct\[Other files]
    \SuperProduct\References\
    \SuperProduct\References\3rdPartyAssembly.dll
    \SuperProduct\References\[Other 3rd party assemblies]
    \SuperProduct\References\MyCommonFunctionalityAssembly.dll
    \SuperProduct\References\[Other common functionality assemblies]

    Η λογική είναι η εξής. Στα references του κάθε project, εκτός από αυτά του .ΝΕΤ που τα βρίσκουμε στο GAC, οποιοδήποτε 3rd party assembly ή οποιοδήποτε άλλο δικό μας assembly χρειάζεται να κάνουμε reference το τοποθετώ στο φάκελο References. Τα μεταξύ των projects references τα προσθέτω κανονικά από το Add Reference... > Projects. Ένα θεματάκι που έχω είναι πως μπορώ να κάνω Add τα references από τον φάκελο References αλλά το Location να είναι relative. Δηλαδή αντί να είναι:
    • C:\MySuperProducts\SuperProduct\References\MyCommonFunctionalityAssembly.dll
    να είναι:
    • \..\References\MyCommonFunctionalityAssembly.dll
    ή κάπως έτσι. Σαν αποτέλεσμα, δε θα χρειάζεται όλοι να κάνουν check out αναγκαστικά στο C:\MySuperProducts. Το ερώτημα είναι πως κάνω relative references στο Visual Studio και πέρα από αυτό πως σας φαίνεται γενικότερα η όλη προσέγγιση;

    Ευχαριστώ,
    Πέτρος

    Πέτρος
  •  02-08-2009, 13:56 52894 σε απάντηση της 35099

    Απ: Καλύτερη οργάνωση των solutions και relative references

    φαίνεσε αρκετά φιλος της οργάνωσης και αυτό είνα καλό!
    Χρησιμποιώ svn για source code αλλά ο τρόπος που κρατώ τα projects είναι σε ξεχωριστούς φακέλους μέσα σε ένα κεντρικό φάκελο, αυτό του solution.
    Tο setup ρίχνει τα παραγόμενα αποτελέσματα των υπο-projects στον ίδιο κεντρικό φάκελο για να μπορέσουν να τρέξουν.

    έχεις προχωρήσει καθόλου με το θέμα? προέκυψαν νέες ιδέες ή θέματα.
    Προτείνω να ζωντανέψουμε τη συζήτηση!

  •  02-08-2009, 19:34 52900 σε απάντηση της 52894

    Απ: Καλύτερη οργάνωση των solutions και relative references

    sakis, όταν απαντάς σε μία ερώτηση 2 ετών λογικό είναι να μην τη θυμάται ούτε καν αυτός που την έκανε. Αν θέλεις να ξεκινήσεις μία συζήτηση, ξεκίνα ένα νέο thread.

    Υ.Γ. Βλέπω ότι έχουν αρχίσει να σου απαντάνε παρόμοια και άλλοι moderators. Δεν είναι καθόλου καλή τακτική να κολλάς δικές σου ερωτήσεις σε threads που έχουν λήξει εδώ και χρόνια.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-08-2009, 10:50 52914 σε απάντηση της 52900

    Απ: Καλύτερη οργάνωση των solutions και relative references

    Υπάρχει κάποια λογική σε αυτό που λες Παναγιώτη. Έχω δει και σε άλλα forums να κλείνει ένα thread όταν έχει περάσει κάποιο διάστημα. Πρέπει όμως να παραδεχτούμε ότι όχι μόνο δεν έκλεισε το συγκεκριμένο thread, αλλά μου ήρθε μέχρι και ειδοποίηση ότι κάποιος απάντησε στην ερώτηση που έκανα πριν από δύο χρόνια. Άρα δε φταίει τόσο πολύ ο φίλος που απάντησε. Ίσως θα ήταν σκόπιμο η πολιτική που περιέγραψες να μην είναι ένας θεωρητικός κανόνας, αλλά να δείτε αν μπορεί να μετατραπεί σε κάποιον αυτοματισμό. Π.χ. να κλείνουν τα threads μετά από ένα μήνα.

    Όσο για τη ουσία: Πάνω κάτω χρησιμοποιώ τη δομή που περιέγραψα πριν δύο χρόνια με επιτυχία προς το παρόν. Η διαφορά είναι πως άρχισα να χρησιμοποιώ τα post build events για να συγκεντρώνω όλα τα αρχεία σε συγκεκριμένο deploy directory το οποίο παίζει όπου και να το τοποθετήσεις στη συνέχεια.

    Για τα references, δεν υπάρχει κάποιο ζήτημα, αφού το VS από μόνο του τακτοποιεί τα paths.

    Για περισσότερες λεπτομέρειες μη διστάσετε να με ρωτήσετε.

    Πέτρος
  •  03-08-2009, 11:23 52917 σε απάντηση της 52914

    Απ: Καλύτερη οργάνωση των solutions και relative references

    Πέτρος Αμοιρίδης:
    Ίσως θα ήταν σκόπιμο η πολιτική που περιέγραψες να μην είναι ένας θεωρητικός κανόνας, αλλά να δείτε αν μπορεί να μετατραπεί σε κάποιον αυτοματισμό. Π.χ. να κλείνουν τα threads μετά από ένα μήνα.


    Βασικά επειδή ίιισως να είναι χρήσιμο κάποια στιγμή να γίνουν απαντήσεις σε παλαιότερα threads, καλύτερα απλά το forum να μην εμφάνιζε threads παλαιότερα του 2-3 μήνών. Ήδη υπάρχει η λειτουργία (είναι χωμένη κάτω κάτω στο κουμπί περισσότερες επιλογές), οπότε απλά να μπει μια default τιμή διαφορετική της "όλες" (πχ η "πριν 2 μήνες").

    ~bs~
  •  04-08-2009, 19:08 52941 σε απάντηση της 52917

    Απ: Καλύτερη οργάνωση των solutions και relative references

    Συγγνώμη αν προκαλώ αναστάτωση.

    Θα μπορούσε να ενεργοποιηθεί το αυτόματο κλείδωμα μετά απο 2-3 μήνες αν μείνει ανενεργή μια συζήτηση. Να βάζεις πάντα νέο thread, καταντάει chat και όχι forum..
    Η λύση πάντα είναι στη μέση!

    Επίσης η φύση του συγκεκριμένου θέματος είναι τέτοια που
    παρά το ότι το θέμα είναι παλίο, είναι κάτι εξειδικευμένο και δυσμετάβλητο για να υπάρχει ανάγκη ανοίγματος νέου thread.

    Επι του θέματος
    Aν δουλείεις τo κάθε υπο project σε ένα ξεχωριστό φάκελο, τότε όλα παίζουν με τη μία (τα υπο-projects υπάρχει ανάγκη να βλέπουν τους φακέλους του κεντρικού project), χάνεις σε οργάνωση γιατί δεν ξέρεις ποιό-αρχείο-ανήκει-που.

    Αν δουλεύεις σε ξεχωριστούς φακέλους τότε πρέπει να δημιουργήσεις μηχανισμούς για να έρχονται τα αποτελέσματα των υπο-project μαζί.. δεν γνωρίζω κάτι για τα post build events.. είναι ενσωματωμένη διαδικασία ή είναι κάτι που το έχτισες εσύ? Φαντάζομαι πως δε μιλάς για το χτίσιμο κάποιου setup.

    Το θέμα θα λυνόταν επίσης εύκολα αν τα παραγόμενα αποτελέσματα του κάθε project μπορούσαν να δεχτούν relative path που να ξεκινά απο το solution και όχι όπως σε περιορίζει να ξεκινά μέσα από το project.
    Θα με βόλεβε πολύ αν μπορούσα να πω ότι όλα τα παραγόμενα bin των υποproject μου να βγαίνουν στον ίδιο φάκελο αυτό του κεντρικού project. έχει κανεις καμιά πατέντα γι αυτό?


  •  04-08-2009, 22:33 52942 σε απάντηση της 52941

    Απ: Καλύτερη οργάνωση των solutions και relative references

    Αν πας στο Solution Explorer > Επιλέξεις το project > Δεξί κλικ > Properties ... θα ανοίξει ένα παράθυρο με τις διάφορες ρυθμίσεις του project. Στα αριστερά μια από τις καρτέλλες ονομάζεται Build Events. Εκεί, έχει μια ενότητα με τίτλο Post-build event command line. Αν πιέσεις το κουμπί που έχει πιο κάτω με τίτλο Edit Post-build ... θα εμφανιστεί ένα παράθυρο όπου μπορείς να γράψεις τις εντολές σου. Σκέψου το σαν ένα bat αρχείο με κάποιες macro predefined που μπορούν να χρησιμοποιηθούν μέσα σαν variables, το οποίο εκτελείται κάθε φορά που κάνεις build το project.

    Εκεί μέσα συνήθως, μεταξύ άλλων, κάνω και τις αντιγραφές των αρχείων που θέλω σε ένα κεντρικό φάκελο. Έχω post build event commands σε κάθε project και συλλέγω ό,τι χρειάζομαι. Επίσης, σε κάποια projects μου που περιέχουν unit tests, εκεί μέσα πάω και βάζω μια εντολή για να εκτελείται το nunit σε κάθε build. Τα αποτελέσματα αυτών των εντολών εμφανίζονται στο Output window του Visual Studio.

    Για να απαντήσω και στις άλλες ερωτήσεις: Όχι δεν αναφέρομαι στο χτίσιμο setup, αλλά στη δημιουργία ένος φακέλου με ό,τι χρειάζεται για να το πάρει χύμα ένας σύμβουλος και να τρέξει ένα test build του solution μου, δίχως να κάνει διάφορα setups κλπ.

    Παλαιότερα, πείραζα το ίδιο το output των διαφόρων configurations (Release, Debug) αλλά στο τέλος είχα προβλήματα, οπότε δεν τα πειράζω πλέον. Αν θέλω κάτι σαν αυτό που ρωτάς στο τέλος, το κάνω γράφοντας εντολές στα διάφορα post build events. Το μειονέκτημα είναι πως πρέπει να συντηρείς αυτές τις εντολές κάθε φορά που αλλάζει κάτι σημαντικό στη δομή των projects (π.χ. ονοματολογία, κατάργηση αρχείων, προσθήκη νέων κλπ).

    Πέτρος
  •  07-08-2009, 21:40 52983 σε απάντηση της 52942

    Απ: Καλύτερη οργάνωση των solutions και relative references

    Νομίζω ότι είναι πολύ καλή η τακτική σου με τα post build events.
    Ο φάκελος που μαζεύεις τα πάντα φαντάζομαι είναι κάποιος από τους Bin\Debug ή Bin\Release ή Bin\(Τάδε), για να μπορεί να εκτελείται άμεσα το exe από το vs πατώντας το run.

    Thaks πολύ για την ιδέα. Ακούγεται πολύ σωστή.

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