Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 2833|Απάντηση: 1

[.NET Πυρήνας] Το .NET/C# υλοποιεί καυτές ενημερώσεις προσθηκών DLL με βάση το AssemblyLoadContext

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2024-6-28 14:28:33 | | | |
απαιτήσεις: Η επιχειρηματική λογική είναι πολύπλοκη και απαιτεί προσαρμογή, και για μια τέτοια λογική, σε μια ξεχωριστή συγκρότηση DLL, το παρασκήνιο μπορεί να ενημερώσει δυναμικά τη συγκρότηση και να εκτελέσει την πιο πρόσφατη λογική.

Το .NET Core δεν υποστηρίζει δυναμική δημιουργία και εκφόρτωση AppDomains όπως το .NET Framework, επομένως δεν υπήρξε ποτέ καλός τρόπος για hotload plugins, αλλά τα καλά νέα είναι ότι το .NET Core υποστηρίζει το Collectible Assembly από την έκδοση 3.0 και μπορούμε να δημιουργήσουμε ένα ανακτήσιμο AssemblyLoadContext που μπορούμε να χρησιμοποιήσουμε για τη φόρτωση και την εκφόρτωση συγκροτημάτων.

Κλάση AssemblyLoadContext:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Αρχικά, δημιουργήστε μια νέα κονσόλα και τρεις βιβλιοθήκες, και συγκεκριμένα:Εφαρμογή κονσόλας6ClassLibraryΠρότυποΒιβλιοθήκηΤάξης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 διαμόρφωση:

(Τέλος)




Προηγούμενος:Σχετικά με το επίπεδο ανοχής σφαλμάτων κωδικού QRCODE QR
Επόμενος:Το .NET/C# χρησιμοποιεί το PDFsharp για τη συγχώνευση πολλών αρχείων PDF σε ένα
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-7-6 16:59:30 |
Χρησιμοποιήστε το Roslyn για να μεταγλωττίσετε δυναμικά τον κώδικα C# και να τον εκτελέσετε
https://www.itsvse.com/thread-10786-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com