απαιτήσεις: Η επιχειρηματική λογική είναι πολύπλοκη και απαιτεί προσαρμογή, και για μια τέτοια λογική, σε μια ξεχωριστή συγκρότηση DLL, το παρασκήνιο μπορεί να ενημερώσει δυναμικά τη συγκρότηση και να εκτελέσει την πιο πρόσφατη λογική.
Το .NET Core δεν υποστηρίζει δυναμική δημιουργία και εκφόρτωση AppDomains όπως το .NET Framework, επομένως δεν υπήρξε ποτέ καλός τρόπος για hotload plugins, αλλά τα καλά νέα είναι ότι το .NET Core υποστηρίζει το Collectible Assembly από την έκδοση 3.0 και μπορούμε να δημιουργήσουμε ένα ανακτήσιμο AssemblyLoadContext που μπορούμε να χρησιμοποιήσουμε για τη φόρτωση και την εκφόρτωση συγκροτημάτων.
Κλάση AssemblyLoadContext:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Αρχικά, δημιουργήστε μια νέα κονσόλα και τρεις βιβλιοθήκες, και συγκεκριμένα:Εφαρμογή κονσόλας6、ClassLibraryΠρότυπο、ΒιβλιοθήκηΤάξης1、ΒιβλιοθήκηΤάξης2, μεταξύ των οποίων οι βιβλιοθήκες ClassLibrary1 και ClassLibrary2 κληρονομούν τη διεπαφή IWorker στο ClassLibraryStandard και εφαρμόζουν τη μέθοδο Εκτέλεση.
ClassLibraryΤυπικός κωδικός:
Κωδικός ClassLibrary1:
Κωδικός ClassLibrary2:
Ο κωδικός της κονσόλας ConsoleApp6 έχει ως εξής:
Η κονσόλα ανοίγει τη μέθοδο Run των 3 νημάτων στο πρόσθετο DLL που εκτελείται συνεχώς δυναμικά και χρησιμοποιεί το log4net για να καταγράψει τα αποτελέσματα εξόδου και στη συνέχεια το εκτελεί στην κονσόλαΑντικαταστήστε το DLL με την πιο πρόσφατη βιβλιοθήκη μετά από 3 δευτερόλεπτα。
Μετά την εκτέλεση της κονσόλας για 1 δευτερόλεπτο ή 5 δευτερόλεπτα, εξάγεται η συλλογή της τρέχουσας παρουσίας AssemblyLoadContext, η οποία είναι η φορτωμένη βιβλιοθήκη DLL.
Οπως φαίνεται παρακάτω:
Μπορείτε να δείτε ότι το πρόγραμμα δεν έχει μη φυσιολογική έξοδο και δεν υπάρχει περίπτωση όπου η προσθήκη δεν μπορεί να βρεθεί κατά τη διαδικασία εκτέλεσης. Ο λόγος για τον οποίο το log4net καταγράφει τα αποτελέσματα εκτέλεσης είναι επειδή η κονσόλα είναι μπλοκαρισμένη και για να διασφαλιστεί ότι τα 3 νήματα μπορούν να εκτελούνται συνεχώς, το log4net χρησιμοποιείται για την καταγραφή των αποτελεσμάτων εκτέλεσης, όπως φαίνεται στο παρακάτω σχήμα:
2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 11 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 10 RollingFile - Ξεκινήστε την απεγκατάσταση 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 11 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 11 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 10 Κυλιόμενο Αρχείο - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 ... 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 10 RollingFile - Η απεγκατάσταση ολοκληρώθηκε 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 ... 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,606 ΠΛΗΡΟΦΟΡΙΕΣ 11 Κυλιόμενο Αρχείο - 1 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 13 Κυλιόμενο Αρχείο - 2 2024-06-28 14:24:36,607 ΠΛΗΡΟΦΟΡΙΕΣ 12 Κυλιόμενο Αρχείο - 2 Επισυνάπτεται config.xml διαμόρφωση:
(Τέλος)
|