Reikalavimai: Verslo logika yra sudėtinga ir ją reikia pritaikyti, o tokiai logikai atskirame DLL rinkinyje fonas gali dinamiškai atnaujinti rinkinį ir vykdyti naujausią logiką.
".NET Core" nepalaiko dinaminio "AppDomains", pvz., ".NET Framework", kūrimo ir iškrovimo, todėl niekada nebuvo gero būdo įkelti papildinius, tačiau gera žinia ta, kad ".NET Core" palaiko "Collectible Assembly" nuo 3.0 ir galime sukurti atkuriamą "AssemblyLoadContext", kurį galime naudoti rinkiniams įkelti ir iškrauti.
AssemblyLoadContext klasė:Hipersaito prisijungimas matomas.
Pirmiausia sukurkite naują konsolę ir tris bibliotekas, būtent:ConsoleApp6、Klasės bibliotekaStandartas、Klasės biblioteka1、Klasės biblioteka2, tarp kurių "ClassLibrary1" ir "ClassLibrary2" bibliotekos paveldi "IWorker" sąsają "ClassLibraryStandard" ir įgyvendina "Run" metodą.
ClassLibraryStandard kodas:
ClassLibrary1 kodas:
ClassLibrary2 kodas:
"ConsoleApp6" konsolės kodas yra toks:
Konsolė atidaro 3 gijų paleidimo metodą DLL papildinyje, kuris nuolat dinamiškai vykdomas, ir naudoja log4net išvesties rezultatams įrašyti, o tada paleidžia jį konsolėjePakeiskite DLL naujausia biblioteka po 3 sekundžių。
Paleidus konsolę 1 sekundę arba 5 sekundes, išvedamas dabartinio AssemblyLoadContext egzemplioriaus rinkinys, kuris yra įkelta DLL biblioteka.
Kaip parodyta žemiau:
Matote, kad programa neturi jokios neįprastos išvesties ir nėra situacijos, kai vykdymo metu nebūtų galima rasti papildinio. Priežastis, kodėl log4net įrašo vykdymo rezultatus, yra ta, kad konsolė yra užblokuota, o siekiant užtikrinti, kad 3 gijos galėtų būti vykdomos nuolat, log4net naudojamas vykdymo rezultatams įrašyti, kaip parodyta paveikslėlyje žemiau:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Pradėti šalinti 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 ... 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Pašalinimas baigtas 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 ... 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 2 2024-06-28 14:24:36,607 INFO 12 RollingFile - 2 Pridedama config.xml konfigūracija:
(Pabaiga)
|