A situação:
Está ocorrendo um problema no cliente, você decide usar um dos exemplos disponibilizados pelo ACBr para testar se o problema está no seu software. Então, você copia o executável para a máquina do cliente, inicia-o e, ao tentar emitir um DFe, recebe a mensagem " XML Node não pode ser nulo".
Ou então, seu próprio software funciona corretamente em sua máquina, mas ao instalá-lo na máquina de um cliente e tentar emitir um DFe, a mensagem "XMLNode não pode ser nulo" é exibida na tela.
A causa e a solução:
Os componentes do ACBr fazem uso de algumas DLLs para diversas funções, incluindo a assinatura de XMLs.
A configuração que determina qual mecanismo será usado para isso pode ser definida na configuração ACBrDFe.Configuracoes.Geral.SSLXmlSignLib, que pode ter os valores xsXmlSec, xsMsXml, xsMsXmlCapicom¹ e xsLibXml2².
¹ Capicom foi descontinuada e, por isso, não recomendamos o seu uso. Veja mais detalhes AQUI.
² Apesar das outras opções, recomendamos fortemente a utilização do LibXML2. Mais detalhes AQUI.
Quando você recebe a mensagem de Xml Node não pode ser nulo, na maioria das vezes, ela está relacionada a esta configuração.
Portanto, o primeiro passo a ser tomado é verificar se uma das opções possíveis foi configurada na configuração SSLXmlSignLib (lembrando que xsNone equivale a não ter nada configurado).
Se uma das opções foi definida, o próximo passo é verificar se a DLL³ foi distribuída corretamente e se está disponível.
Uma forma de certificar-se disso é escolher as DLLs de acordo com a arquitetura com a qual sua aplicação foi compilada, encontrando-as neste link e colocá-las no mesmo diretório da sua aplicação.
³ As dlls referidas são da LibXML2