Requisiti: La logica di business è complessa e richiede personalizzazione, e per tale logica, in un assembly DLL separato, lo sfondo può aggiornare dinamicamente l'assembly ed eseguire la logica più recente.
.NET Core non supporta la creazione e lo scarico dinamico di AppDomain come il .NET Framework, quindi non c'è mai stato un buon modo per caricare plug, ma la buona notizia è che .NET Core supporta Collectible Assembly dalla versione 3.0, e possiamo creare un AssemblyLoadContext recuperabile che possiamo usare per caricare e scaricare assemblaggi.
Classe AssemblyLoadContext:Il login del link ipertestuale è visibile.
Per prima cosa, crea una nuova console e tre librerie, ovvero:ConsoleApp6、ClassLibraryStandard、BibliotecaClasse1、BibliotecaClasse2, tra cui le librerie ClassLibrary1 e ClassLibrary2 ereditano l'interfaccia IWorker in ClassLibraryStandard e implementano il metodo Run.
Codice standard di ClassLibrary:
Codice ClassLibrary1:
Codice ClassLibrary2:
Il codice console di ConsoleApp6 è il seguente:
La console apre il metodo Run di 3 thread nel plugin DLL che viene costantemente in esecuzione dinamica, usa log4net per registrare i risultati di output e poi lo esegue nella consoleSostituisci la DLL con l'ultima libreria dopo 3 secondi。
Dopo aver eseguito la console per 1 secondo o 5 secondi, viene prodotta la raccolta dell'istanza corrente di AssemblyLoadContext, che è la libreria DLL caricata.
Come mostrato di seguito:
Puoi vedere che il programma non ha alcun output anomalo e non c'è alcuna situazione in cui il plugin non possa essere trovato durante il processo di esecuzione. Il motivo per cui log4net registra i risultati dell'esecuzione è che la console è bloccata e, per garantire che i 3 thread possano essere eseguiti continuamente, log4net viene utilizzato per registrare i risultati dell'esecuzione, come mostrato nella figura sottostante:
2024-06-28 14:24:36,606 INFO 11 File Mobili - 1 2024-06-28 14:24:36,606 INFO 10 Rolling File - Inizia a disinstallare 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 11 File Mobili - 1 2024-06-28 14:24:36,606 INFO 11 File Mobili - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 10 Rolling File - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 2024-06-28 14:24:36,606 INFO 13 File Rolling - 1 ... 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,607 INFO 13 File mobile - 1 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,606 INFO 10 File in rotazione - Disinstallazione completata 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 ... 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,607 INFO 13 File mobile - 1 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,607 INFO 13 File mobile - 1 2024-06-28 14:24:36,607 INFO 12 File Rolling - 1 2024-06-28 14:24:36,606 INFO 11 File Mobili - 1 2024-06-28 14:24:36,607 INFO 13 Archivio Rolling - 2 2024-06-28 14:24:36,607 INFO 12 File Mobili - 2 Configurazione config.xml allegata:
(Fine)
|