Έχω κάνει ένα έργο σε C#.NET όπου το αρχείο βάσης δεδομένων μου είναι ένα βιβλίο εργασίας του Excel. Δεδομένου ότι η θέση της συμβολοσειράς σύνδεσης είναι σκληρά κωδικοποιημένη στην κωδικοποίησή μου, δεν υπάρχει πρόβλημα για την εγκατάστασή της στο σύστημά μου, αλλά για άλλα συστήματα υπάρχει.
Υπάρχει τρόπος να ζητηθεί από τον χρήστη να ορίσει μια φορά τη διαδρομή αφού ολοκληρωθεί η εγκατάσταση της εφαρμογής;
Οι απαντήσεις που πήρα ήταν "Use App.Config"... μπορεί κάποιος να μου πει τι είναι αυτό το App.config και πώς να το χρησιμοποιήσω στο δικό μου πλαίσιο εδώ;
Στην απλούστερη μορφή του, το app.config είναι ένα αρχείο XML με πολλά προκαθορισμένα τμήματα ρυθμίσεων και υποστήριξη για προσαρμοσμένα τμήματα ρυθμίσεων. Ένα τμήμα διαμόρφωσης είναι ένα κομμάτι XML με ένα σχήμα που προορίζεται για την αποθήκευση κάποιου τύπου πληροφοριών.
Οι ρυθμίσεις μπορούν να διαμορφωθούν χρησιμοποιώντας ενσωματωμένα τμήματα διαμόρφωσης, όπως τα connectionStrings
ή appSettings
. Μπορείτε να προσθέσετε τις δικές σας προσαρμοσμένες ενότητες ρυθμίσεων- αυτό είναι ένα θέμα για προχωρημένους, αλλά πολύ ισχυρό για τη δημιουργία ισχυρά τυποποιημένων αρχείων ρυθμίσεων.
Οι διαδικτυακές εφαρμογές έχουν συνήθως ένα αρχείο web.config, ενώ οι εφαρμογές GUI/υπηρεσιών των Windows έχουν ένα αρχείο app.config.
Τα αρχεία ρυθμίσεων σε επίπεδο εφαρμογής κληρονομούν ρυθμίσεις από τα καθολικά αρχεία ρυθμίσεων, π.χ. το machine.config.
Οι συμβολοσειρές σύνδεσης έχουν ένα προκαθορισμένο σχήμα που μπορείτε να χρησιμοποιήσετε. Σημειώστε ότι αυτό το μικρό απόσπασμα είναι στην πραγματικότητα ένα έγκυρο αρχείο app.config (ή web.config):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="MyKey"
connectionString="Data Source=localhost;Initial Catalog=ABC;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Μόλις ορίσετε το app.config σας, μπορείτε να το διαβάσετε στον κώδικα χρησιμοποιώντας την κλάση ConfigurationManager. Μην πτοηθείτε από τα μακροσκελή παραδείγματα του MSDN- στην πραγματικότητα είναι αρκετά απλό.
string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;
Η συχνή αλλαγή των αρχείων *.config δεν είναι συνήθως καλή ιδέα, αλλά ακούγεται σαν να θέλετε να εκτελέσετε μόνο μια φορά τη ρύθμιση.
Δείτε: https://stackoverflow.com/q/502411/453277 που περιγράφει πώς να ενημερώνετε την ενότητα connectionStrings
του αρχείου *.config κατά την εκτέλεση.
Σημειώστε ότι ιδανικά θα εκτελούσατε τέτοιες αλλαγές ρυθμίσεων από ένα απλό πρόγραμμα εγκατάστασης.
Q: Έστω ότι αλλάζω χειροκίνητα κάποια <τιμή>
στο app.config, το αποθηκεύω και στη συνέχεια το κλείνω. Τώρα, όταν πηγαίνω στο φάκελο bin και εκκινώ το αρχείο .exe από εδώ, γιατί δεν αντικατοπτρίζει τις αλλαγές που εφαρμόστηκαν;
A: Όταν μεταγλωττίζετε μια εφαρμογή, το app.config της αντιγράφεται στον κατάλογο bin1 με ένα όνομα που ταιριάζει με το exe σας. Για παράδειγμα, αν το exe σας ονομάστηκε "test.exe", θα πρέπει να υπάρχει ένα "text.exe.config" στον κατάλογο bin. Μπορείτε να αλλάξετε τη διαμόρφωση χωρίς επαναμεταγλώττιση, αλλά θα πρέπει να επεξεργαστείτε το αρχείο ρυθμίσεων που δημιουργήθηκε κατά τη μεταγλώττιση και όχι το αρχικό app.config.
1: Σημειώστε ότι τα αρχεία web.config δεν μετακινούνται, αλλά παραμένουν στην ίδια θέση κατά τη μεταγλώττιση και την ανάπτυξη. Μια εξαίρεση σε αυτό είναι όταν ένα αρχείο web.config transformed.</sub>,
Νέες επιλογές διαμόρφωσης εισήχθησαν με το .NET Core. Ο τρόπος με τον οποίο λειτουργούν τα αρχεία *.config δεν φαίνεται να έχει αλλάξει, αλλά οι προγραμματιστές είναι ελεύθεροι να επιλέξουν νέα, πιο ευέλικτα παραδείγματα διαμόρφωσης.
Το App.Config είναι ένα αρχείο XML που χρησιμοποιείται ως αρχείο ρυθμίσεων για την εφαρμογή σας. Με άλλα λόγια, αποθηκεύετε μέσα σε αυτό κάθε ρύθμιση που μπορεί να θέλετε να αλλάξετε χωρίς να χρειαστεί να αλλάξετε κώδικα (και να κάνετε επαναμεταγλώττιση). Χρησιμοποιείται συχνά για την αποθήκευση συμβολοσειρών σύνδεσης.
Δείτε αυτό το άρθρο του MSDN για το πώς να το κάνετε αυτό.
Μπορείτε να αποκτήσετε πρόσβαση σε κλειδιά στο App.Config χρησιμοποιώντας:
ConfigurationSettings.AppSettings["KeyName"]
Ρίξτε μια ματιά στο αυτό το νήμα