Exceção EmguCV quando publicada no IIS

Meu aplicativo asp.net funciona bem se eu depurar ou executá-lo no meu IIS local. Mas se eu publicá-lo em um IIS, parece que o EmguCV perde as dlls necessárias. A pasta bin do meu projeto VS uma pasta bin no IIS é idêntica.

A seguinte exceção ocorre: O inicializador de tipo para ‘Emgu.CV.CvInvoke’ emitiu uma exceção. StackTrace: em Emgu.CV.CvInvoke.cvCreateImageHeader (Tamanho do tamanho, profundidade IPL_DEPTH, canais Int32) em Emgu.CV.Image 2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels) at Emgu.CV.Image 2.set_Bitmap (Bitmap value) em CustomerserviceWizard.ImageHelper.DecodeUrl (fonte LuminanceSource, bitmap bitmap, methods List`1) em: line 213

Qualquer ajuda é apreciada.

Tudo bem, depois de muita pesquisa e cabelos grisalhos, finalmente convenci meu chefe a usar um PC de mesa para processar imagens com o EmguCV. O motivo (bastante óbvio) para a exceção foi a falta da GPU nVidia Cuda no servidor.

Uma vez tive um problema semelhante, talvez isso ajude no seu caso: verifique as configurações do pool de aplicativos do IIS e certifique-se de ativar os aplicativos de 32 bits em “Configurações avançadas”.

Erro mostrado quando tentei executar o EmguCV no IIS – Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E) Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Exceção – The type initializer for 'Emgu.CV.CvInvoke' threw an exception .

No meu caso, resolvi isso habilitando a experiência da área de trabalho da interface do usuário para o Windows Server (no meu caso – Windows Server 2012 R2) porque a Microsoft nunca habilitou esse recurso no Windows Server por padrão.


Solução

Para o Windows Server 2008

  1. Vá em Iniciar >> Ferramentas Administrativas >> Gerenciador de Servidores.
  2. No painel esquerdo, clique em Recursos. Na seção Resumo dos Recursos, clique em Adicionar Recursos.
  3. Na página Selecionar Recursos, selecione a checkbox de seleção Experiência Desktop.
  4. Revise os resources necessários que precisam ser instalados e clique em Adicionar Recursos Necessários, clique em Avançar.
  5. Na página Confirmar Seleções de Instalação, verifique se o recurso Experiência Desktop está instalado, clique em Instalar.
  6. Na página Resultados da instalação, você será solicitado a reinicializar o servidor para concluir o processo de instalação.
  7. Basta clicar em Fechar e, em seguida, clique em Sim para reinicializar o servidor.
  8. Quando o servidor reiniciar, efetue login no servidor e o servidor concluirá as etapas de instalação restantes.

Para o Windows Server 2012

  1. Vá em Iniciar >> Ferramentas Administrativas >> Gerenciador de Servidores.
  2. No Gerenciador de Servidores, clique em Recursos.
  3. No painel de detalhes do Gerenciador de Servidores, em Resumo de Recursos, clique em Adicionar resources.
  4. Isso iniciará o Assistente para Adicionar Recursos.
  5. Agora, na lista Recursos, selecione Experiência Desktop e clique em Instalar.

Espero que esta solução possa te ajudar 🙂

Links – Solução do GitHub e Descrição com captura de canvas