Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 2833|Resposta: 1

[.NET Core] .NET/C# implementa atualizações quentes de plugins DLL baseadas no AssemblyLoadContext

[Copiar link]
Postado em 28-06-2024 às 14:28:33 | | | |
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:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, 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)




Anterior:Sobre o nível de tolerância a falhas do código QR QR
Próximo:.NET/C# usa PDFsharp para unir múltiplos arquivos PDF em um só.
 Senhorio| Postado em 2024-7-6 16:59:30 |
Use o Roslyn para compilar código C# dinamicamente e executá-lo
https://www.itsvse.com/thread-10786-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com