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,
  • Este tópico foi criado há 204 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

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.

 

 

 

  • Membros Pro
Postado

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.

 

  • 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
  • Membros Pro
Postado

@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>

 

  • Consultores
Postado
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
  • Membros Pro
Postado

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
  • 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
  • Membros Pro
Postado

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
  • Este tópico foi criado há 204 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.