Καλησπέρα παιδιά,
Θα ήθελα να με βοηθήσετε με την εμπειρία σας ως προς το πως είναι καλύτερο να οργανωθεί η δομή των φακέλων ενός 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 και πέρα από αυτό πως σας φαίνεται γενικότερα η όλη προσέγγιση;
Ευχαριστώ,
Πέτρος
Πέτρος