Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 185 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
Postado (editado)

Refatoração das Classes de Alto nível C#

Olá Comunidade image.png.c66a8e350a15080739793c08a9f4af5f.webp!

Estamos refatorando as classes de alto nível e exemplos em C# para ACBrLibs (ACBrNFe, ACBrNFse, ACBrCEP, etc.) para corrigir bugs.

A principal mudança é a versão mínima como requisito para utilizar: .NET 8 (LTS) e superior ou .NET Framework 4.8.x

As mudanças não afetam os métodos em alto nível.

Motivação

  • Correção de bugs de condição de corrida em ambientes Multi-Thread;
  • Simplificação de manutenção de código;
  • A comunidade ACBr está adotando cada vez mais .NET, ASP.NET em ambientes multiplataforma (Linux e Windows);
  • Melhor suporte para Linux (no caso do .NET);
  • Acompanhar o avanço da tecnologia .NET;

O que você precisa estar atento?

Estamos migrando nosso desenvolvimento para .NET 8 (LTS) e superior ou .NET Framework 4.8. Os exemplos e classe de alto nível talvez funcionem com versões .NET 5, 6 e 7.

Mas recomendamos o uso da versão .NET 8 pelo menos. Isso porque:

Dica: use o GitHub Copilot Modernization Agent para te ajudar a fazer a migração do seu código.

 

Novidades

ACBrLibHandle.cs foi simplificado, agora apenas expõe as assinaturas de métodos comuns de alto nível.

 

Finalizar:

Método Finalizar() agora é publico. O desenvolvedor tem a escolha de quando destruir a instância de pLibHandle*.

 

Dispose:

O método Dispose() nessa nova versão apenas finaliza a instância de pLibHandle*. A versão anterior, além de destruir esse ponteiro, também descarregava  a biblioteca nativa (DLL ou .SO).

Essa era uma situação que levava a condição de corrida em ambientes Multithread com possível erros de Access Violation.

Com essa nova abordagem (DllImport) a biblioteca nativa é carregada e descarregada uma única vez.

Obs.: Após o Dispose() a instância não poderá ser reutilizada!

*plibHandle é um ponteiro que permite que a instância/thread tenha seu componente ACBr (exemplo ACBrNFe) independente.

 

Exemplo:

 

var ACBrNFSe lib = new ACBrNFSe();
String message = "";

        try
        {
            message = lib.Versao();
        }
        catch (Exception ex)
        {
            message = ex.Message;
        }
        finally {
          lib.Finalizar();
        }
    }
    

Cronograma em Fases da migração

Datas previstas para migração **

Fase 1 - Commit no SVN das classes modificadas e demos. - Sem data prevista no momento.

Fase 2 - Disponibilização de pacotes no NUGET. - Sem data prevista no momento. 

** Sujeito a alterações.

 

Referencias

https://learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/delegates/using-delegates

https://learn.microsoft.com/en-us/lifecycle/products/microsoft-net-and-net-core

https://dotnet.microsoft.com/pt-br/platform/support/policy/dotnet-core

 

Editado por EMBarbosa
Vamos manter a compatibilidade do .NET Framework 4.8
  • Curtir 5
  • danieloliveira-mm changed the title to Refatoração das Classes de Alto nível C#
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.