Requisitos: A lógica de negócios é complexa e requer personalização, e para tal lógica, em um assembly DLL separado, o background pode atualizar dinamicamente o assembly e executar a lógica mais recente.
O .NET Core não suporta criação e descarregamento dinâmico de AppDomains como o .NET Framework, então nunca houve uma boa forma de instalar plugins rapidamente, mas a boa notícia é que o .NET Core suporta Collectible Assembly desde a versão 3.0, e podemos criar um AssemblyLoadContext recuperável que podemos usar para carregar e descarregar assemblies.
Classe AssemblyLoadContext:O login do hiperlink está visível.
Primeiro, crie um novo console e três bibliotecas, a saber:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, entre as quais as bibliotecas ClassLibrary1 e ClassLibrary2 herdam a interface IWorker no ClassLibraryStandard e implementam o método Run.
Código padrão do ClassLibrary:
Código ClassLibrary1:
Código ClassLibrary2:
O código do console do ConsoleApp6 é o seguinte:
O console abre o método Run de 3 threads no plugin DLL que está constantemente executando dinamicamente, usa log4net para registrar os resultados de saída e então o executa no consoleSubstitua a DLL pela biblioteca mais recente após 3 segundos。
Após rodar o console por 1 ou 5 segundos, a coleção da instância atual do AssemblyLoadContext é saída, que é a biblioteca DLL carregada.
Como mostrado abaixo:
Você pode ver que o programa não tem nenhuma saída anormal, e não há situação em que o plugin não possa ser encontrado durante o processo de execução. A razão pela qual o log4net registra os resultados da execução é porque o console está bloqueado, e para garantir que os 3 threads possam ser executados continuamente, o log4net é usado para registrar os resultados da execução, como mostrado na figura abaixo:
2024-06-28 14:24:36,606 INFO 11 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFO 10 Arquivo Rolante - Comece a desinstalar 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFO 11 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFO 11 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 10 Arquivo Móvel - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 13 Arquivo Móvel - 1 ... 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFORMAÇÕES 10 Arquivo Rolante - Desinstalação completa 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 ... 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 13 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 12 Arquivo Móvel - 1 2024-06-28 14:24:36,606 INFO 11 Arquivo Móvel - 1 2024-06-28 14:24:36,607 INFORMAÇÕES 13 Arquivo Rolante - 2 2024-06-28 14:24:36,607 INFO 12 Arquivo Móvel - 2 Configuração config.xml anexada:
(Fim)
|