Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao carregar a função: AssociarAssinatura na Biblioteca: mfe.dll | Após migração para pacotes nuget (C#)


Ver Solução Respondido por Renato Rubinho,

Recommended Posts

  • Membros Pro

Olá pessoal, estamos recebendo a seguinte mensagem para o MFE (estado do ceará):

- Erro ao carregar a função: AssociarAssinatura na Biblioteca: mfe.dll

Nós já estávamos com uma versão anterior funcionando no cliente, versão x64 do nosso sistema, versões x64 das DLLs do ACBr e também instalação do MFE em x64. Nesta nova versão (que começou o erro), fizemos a atualização das DLLs para as mais novas e também removemos os projetos (código fonte) do nosso projeto e passamos utilizar as disponibilizadas no nuget, mantendo tudo em x64, que então começou este erro.

 

Fizemos um teste voltando para as versões do ACBr que sabíamos que funcionava para ter certeza que não era algum problema na versão da DLL, e também aconteceu o mesmo problema, um outro teste foi voltar o código fonte ACBrLib(C#) para o projeto, e ai funcionou normalmente.

 

Vimos também um tópico aqui no fórum comentando sobre a compilação do projeto, que cita "muito provavel você compilou seu projeto como AnyCPU"

 

Parece ser um problema com a ACBrLib.Core.csproj que está configurando a plataforma com <Platforms>AnyCPU;x86</Platforms>.

Podem nos dar um help com essa questão ?

 

Obrigado.

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

@gostartlab,

O problema parece estar relacionado ao uso de 64 bits... nem todos os fabricantes de equipamentos disponibilizam DLLs de 64 bits

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá, porém antes da atualização do código para utilização da biblioteca via nuget estava funcionando.

 

Quando volto para utilizar os códigos C# dentro da nossa aplicação funciona, se mudamos para os pacotes nuget, o erro aparece.

Utilizando exatamente as mesmas DLL ACBr e MFE, todos utilizando a instalação x64.

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Postado (editado)

Comparando os projetos ACBrLib.CoreACBrLib.SatMTACBrLib.NFeMT, somente no ACBrLib.Core tem a configuração <Platforms>AnyCPU;x86</Platforms>, e como o problema parece ser em relação a arquitetura x86 e x64, parece mais ser na configuração deste projeto.

Tem algum motivo para ter esta configuração no projeto ? Perguntando pois pode ser algo que não temos mapeado aqui.

 

Mandando aqui como está o csproj para o ACBrLib.Core dentro do nosso projeto, o que agente faz é copiar os fontes para dentro do nosso projeto, porém sem a configuração Platforms

image.png.6872001ae7d9e500a140c03f2b31933a.png

Editado por gostartlab
Link para o comentário
Compartilhar em outros sites

  • Consultores

@gostartlab
Será queesta opção nao esta marcada ai p vc?
entao ele esta compilando 32.. dai a dll do mfe/sat tem q ser 32
Lembrando que nem todos SAT/MFe tem dll 64
image.png

  • Curtir 2
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

@Daniel InfoCotidiano, no meu caso não utilizo o Visual Studio, não tenho ctz se é pelo seu print. Mas de qlqr forma, compilamos via linha de comando o projeto:

dotnet publish --no-restore --configuration Release -p:AssemblyVersion=0.0.1 -p:Version=1294207768-staging -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true --self-contained true --output ./publish-agent-win --runtime win-x64 src/Agent.WorkerService

passamos a runtime pra win-x64, porém a minha dúvida é se isso também se propaga para as libs que referenciamos ou se deve definido quando geram o pacote para versionar no nuget.

O nosso Agent.WorkerService.csproj esta dessa forma:

<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <RootNamespace>Agent.WorkerService</RootNamespace>
    <Version>1.2.3.4-Dev</Version>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="ACBrLib.Core" Version="1.2.2" />
    <PackageReference Include="ACBrLib.NFeMT" Version="1.0.6" />
    <PackageReference Include="ACBrLib.PosPrinterMT" Version="1.0.3" />
    <PackageReference Include="ACBrLib.SatMT" Version="1.0.3" />
  </ItemGroup>
</Project>

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
19 horas atrás, gostartlab disse:

Comparando os projetos ACBrLib.CoreACBrLib.SatMTACBrLib.NFeMT, somente no ACBrLib.Core tem a configuração <Platforms>AnyCPU;x86</Platforms>, e como o problema parece ser em relação a arquitetura x86 e x64, parece mais ser na configuração deste projeto.

Boa tarde @gostartlab

Olhando no histórico dos commits, aparentemente essa alteração foi sem necessidade, provavelmente acidental em meio a outras alterações.

 ̶R̶E̶M̶O̶V̶I̶D̶O̶ ̶-̶ ̶G̶e̶r̶e̶i̶ ̶u̶m̶ ̶n̶o̶v̶o̶ ̶p̶a̶c̶o̶t̶e̶ ̶n̶u̶g̶e̶t̶ ̶(̶A̶C̶B̶r̶L̶i̶b̶.̶C̶o̶r̶e̶.̶1̶.̶2̶.̶5̶.̶n̶u̶p̶k̶g̶A̶C̶B̶r̶L̶i̶b̶.̶C̶o̶r̶e̶.̶1̶.̶2̶.̶5̶.̶s̶n̶u̶p̶k̶g̶)̶ ̶a̶p̶e̶n̶a̶s̶ ̶r̶e̶m̶o̶v̶e̶n̶d̶o̶ ̶o̶ ̶x̶8̶6̶ ̶e̶ ̶v̶o̶l̶t̶a̶n̶d̶o̶ ̶c̶o̶m̶o̶ ̶e̶r̶a̶ ̶a̶n̶t̶e̶s̶:̶ ̶<̶P̶l̶a̶t̶f̶o̶r̶m̶s̶>̶A̶n̶y̶C̶P̶U̶<̶/̶P̶l̶a̶t̶f̶o̶r̶m̶s̶>̶

Você consegue instalar o pacote localmente no seu cenário e validar se fica ok com esse ajuste?

Criada TK-5470 para análise do problema.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Pessoal, conseguimos descobrir o problema.

 

O real problema é que na classe ACBrLibHandle.cs, está sobrescrevendo a variável PATH do usuário/sistema, neste caso quando a DLL do acbr vai carregar a DLL do mfe, ela não é encontrada, porque o PATH não tem mais as outras referências.

 

Alterando este trecho:

public static string LibraryPath
        {
            get => libraryPath;
            set
            {
                if (value != libraryPath)
                    Environment.SetEnvironmentVariable("PATH", value);

                libraryPath = value;
            }
        }

por isto:

public static string LibraryPath
        {
            get => libraryPath;
            set
            {
                if (value != libraryPath)
                {
                  var currentPath = Environment.GetEnvironmentVariable("PATH");
                  var updatedPath = string.Concat(currentPath, ";", value);
                  Environment.SetEnvironmentVariable("PATH", updatedPath);
                }

                libraryPath = value;
            }
        }

Ai resolveu, assim somente adicionamos no PATH já existente, mas mantendo todas as referências que já tinham.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado pela contribuição.

A alteração faz sentido para não sobrescrever a configuração do usuário e funcionou corretamente com os imports e com o nuget.

Por favor, veja se consegue fazer o teste com o novo pacote local a seguir (ACBrLib.Core.1.2.5.nupkg ACBrLib.Core.1.2.5.snupkg).

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Postado (editado)

@Renato Rubinho, no arquivo que mandou não tem alteração parece, decompilando mostrou o mesmo código:

image.png.6986fd17f33006d8c52757377d07ae36.png

Aconteceu o mesmo erro.

Pode tentar gerar com uma outra versão pra gente garantir que não teve algum conflito ou algo assim por ter gerado na mesma versão ?

Editado por gostartlab
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá @Renato Rubinho, funcionou com esta nova versão, era algum conflito local mesmo no build.

 

Quando versionar para o nuget público nos avise fazendo favor ? Deixamos o cliente para emitir NFCe temporariamente em produção, com a nova versão vai funcionar o MFE deles.

 

Obrigado.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.