Cerințe: Logica de business este complexă și necesită personalizare, iar pentru o astfel de logică, într-un ansamblu DLL separat, fundalul poate actualiza dinamic asamblarea și executa cea mai recentă logică.
.NET Core nu suportă crearea și descărcarea dinamică a AppDomain-urilor, așa cum este .NET Framework, așa că nu a existat niciodată o metodă bună de a încărca plugin-uri hotload, dar vestea bună este că .NET Core suportă Collectible Assembly încă din versiunea 3.0 și putem crea un AssemblyLoadContext recuperabil pe care îl putem folosi pentru a încărca și descărca asamblări.
Clasa AssemblyLoadContext:Autentificarea cu hyperlink este vizibilă.
În primul rând, creează o nouă consolă și trei biblioteci, și anume:ConsoleApp6、ClassLibraryStandard、BibliotecăClase1、ClassLibrary2, printre care bibliotecile ClassLibrary1 și ClassLibrary2 moștenesc interfața IWorker din ClassLibraryStandard și implementează metoda Run.
Cod standard ClassLibrary:
Codul ClassLibrary1:
Cod ClassLibrary2:
Codul consolei ConsoleApp6 este următorul:
Consola deschide metoda Run a celor 3 fire de execuție din pluginul DLL care rulează dinamic constant, folosește log4net pentru a înregistra rezultatele de ieșire, apoi o rulează în consolăÎnlocuiește DLL-ul cu cea mai recentă bibliotecă după 3 secunde。
După rularea consolei timp de 1 secundă sau 5 secunde, colectarea instanței curente AssemblyLoadContext este ieșită, adică biblioteca DLL încărcată.
Așa cum se arată mai jos:
Poți vedea că programul nu are nicio ieșire anormală și nu există nicio situație în care pluginul să nu poată fi găsit în timpul procesului de execuție. Motivul pentru care log4net înregistrează rezultatele execuției este că consola este blocată, iar pentru a asigura că cele 3 fire pot rula continuu, log4net este folosit pentru a înregistra rezultatele execuției, așa cum se arată în figura de mai jos:
2024-06-28 14:24:36,606 INFO 11 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 10 Fișier rulant - Începe dezinstalarea 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 11 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 11 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 10 Fișier rulant - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 13 Fișier rulant - 1 ... 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,607 INFORMAȚII 13 Fișier rulant - 1 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 10 Fișier rulant - Dezinstalare completă 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 ... 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,607 INFORMAȚII 13 Fișier rulant - 1 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,607 INFORMAȚII 13 Fișier rulant - 1 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 1 2024-06-28 14:24:36,606 INFO 11 Fișier rulant - 1 2024-06-28 14:24:36,607 INFO 13 Fișier rulant - 2 2024-06-28 14:24:36,607 INFO 12 Fișier rulant - 2 Configurația config.xml atașată:
(Sfârșit)
|