OpenAC.Net.DFe.Core
1.7.0.1
Prefix Reserved
dotnet add package OpenAC.Net.DFe.Core --version 1.7.0.1
NuGet\Install-Package OpenAC.Net.DFe.Core -Version 1.7.0.1
<PackageReference Include="OpenAC.Net.DFe.Core" Version="1.7.0.1" />
<PackageVersion Include="OpenAC.Net.DFe.Core" Version="1.7.0.1" />
<PackageReference Include="OpenAC.Net.DFe.Core" />
paket add OpenAC.Net.DFe.Core --version 1.7.0.1
#r "nuget: OpenAC.Net.DFe.Core, 1.7.0.1"
#:package OpenAC.Net.DFe.Core@1.7.0.1
#addin nuget:?package=OpenAC.Net.DFe.Core&version=1.7.0.1
#tool nuget:?package=OpenAC.Net.DFe.Core&version=1.7.0.1
<div align="center">
OpenAC.Net.DFe.Core
Núcleo de serialização XML de alta performance, assinatura digital e comunicação com Web Services para Documentos Fiscais Eletrônicos (DF-e).
</div>
📌 Visão Geral
O OpenAC.Net.DFe.Core é a biblioteca base do ecossistema OpenAC .Net para desenvolvimento e integração com Documentos Fiscais Eletrônicos no Brasil (NF-e, NFC-e, CT-e, MDF-e, SAT/CF-e, NFS-e, BP-e, CIOT, entre outros).
Ele provê a infraestrutura fundamental de:
- Serialização e Deserialização XML: Baseada em Roslyn Source Generator em tempo de compilação (Zero Reflection, alta performance e compatibilidade nativa com AOT/Trimming).
- Assinatura Digital XML-DSig: Suporte completo a certificados digitais ICP-Brasil (A1 e A3) com algoritmos SHA-1 e SHA-256.
- Validação de Schemas XSD: Validação sintática e estrutural rigorosa contra schemas oficiais da SEFAZ.
- Clientes de Web Services: Clientes base para comunicação SOAP e REST com suporte a mTLS, timeout configurável, logs de requisição/resposta e regras de contingência (SVC-AN, SVC-RS, etc.).
🚀 Principais Recursos
- ⚡ Source Generator Integrado: Não utiliza Reflection em tempo de execução. O gerador é embutido no próprio pacote e gera métodos C# nativos (
WriteToXml,ReadFromXml) durante a compilação. - 🔒 Pronto para Native AOT: Compatível com compilação Ahead-of-Time (.NET 8, .NET 9 e .NET 10).
- 🏷️ Anotações Fiscais Especializadas: Atributos específicos para regras da SEFAZ (
[DFeRoot],[DFeElement],[DFeAttribute],[DFeCollection],[DFeEnum],[DFeDictionary]). - 🔢 Tipagem Fiscal Rigorosa (
TipoCampo): Formatação automática para decimais de 2 a 10 casas (De2,De3,De4,De6,De10), datas fiscais (Dat,DatCFe), horas (Hor,HorCFe) e fusos horários (DatHorTz). - 📁 Gerenciamento Inteligente de Arquivos: Organização automática de XMLs por CNPJ, Modelo, Ano e Mês.
- 🎯 Multi-Targeting: Suporte a
.NET Standard 2.0,.NET 6.0,.NET 7.0,.NET 8.0+e.NET Framework 4.6.2+.
📦 Instalação
Adicione o pacote via CLI do .NET:
dotnet add package OpenAC.Net.DFe.Core
Ou através do Gerenciador de Pacotes do Visual Studio:
Install-Package OpenAC.Net.DFe.Core
(O Source Generator já está embutido no pacote. Nenhuma instalação adicional é necessária!)
💡 Exemplos de Uso
1. Criando um Modelo e Serializando para XML
Basta declarar a classe como partial e utilizar as anotações do OpenAC.Net:
using System;
using System.Collections.Generic;
using OpenAC.Net.DFe.Core.Attributes;
using OpenAC.Net.DFe.Core.Document;
using OpenAC.Net.DFe.Core.Serializer;
namespace MeuProjeto.Modelos;
[DFeRoot("NFe", Namespace = "http://www.portalfiscal.inf.br/nfe")]
public partial class NotaFiscal : DFeDocument<NotaFiscal>
{
[DFeAttribute(TipoCampo.Str, "Id")]
public string Id { get; set; } = string.Empty;
[DFeElement(TipoCampo.DatHorTz, "dhEmi", Ocorrencia = Ocorrencia.Obrigatoria)]
public DateTimeOffset DataEmissao { get; set; }
[DFeElement(TipoCampo.De2, "vNF", Ocorrencia = Ocorrencia.Obrigatoria)]
public decimal ValorTotal { get; set; }
[DFeCollection("itens")]
[DFeItem(typeof(ItemNota), "det")]
public List<ItemNota> Itens { get; set; } = new();
}
public partial class ItemNota
{
[DFeAttribute(TipoCampo.Int, "nItem")]
public int NumeroItem { get; set; }
[DFeElement(TipoCampo.Str, "cProd", Ocorrencia = Ocorrencia.Obrigatoria)]
public string CodigoProduto { get; set; } = string.Empty;
[DFeElement(TipoCampo.De2, "vProd", Ocorrencia = Ocorrencia.Obrigatoria)]
public decimal ValorProduto { get; set; }
}
Gerando e Lendo o XML:
// 1. Instanciar o modelo
var nfe = new NotaFiscal
{
Id = "NFe35260100000000000191550010000000011000000011",
DataEmissao = DateTimeOffset.Now,
ValorTotal = 150.00m,
Itens =
{
new ItemNota { NumeroItem = 1, CodigoProduto = "PROD001", ValorProduto = 150.00m }
}
};
// 2. Serializar para string XML (gerado pelo Source Generator em tempo de compilação)
string xml = nfe.WriteToXml();
Console.WriteLine(xml);
// 3. Deserializar a partir de XML
NotaFiscal documento = NotaFiscal.Load(xml);
Console.WriteLine($"Carregado: {documento.Id} - Total: {documento.ValorTotal:C2}");
2. Assinando Digitalmente um Documento (XML-DSig)
Para documentos que exigem assinatura digital, herde de DFeSignDocument<T>:
using System.Security.Cryptography.X509Certificates;
using OpenAC.Net.DFe.Core.Common;
using OpenAC.Net.DFe.Core.Document;
public partial class MinhaNFeAssinada : DFeSignDocument<MinhaNFeAssinada>
{
// Propriedades do documento...
}
// Assinando o XML:
var cert = new X509Certificate2("certificado.pfx", "senha123");
minhaNFe.Assinar(cert, TipoAssinatura.RsaSha1, "infNFe", "NFe");
// Obtendo o XML assinado completo com a tag <Signature>
string xmlAssinado = minhaNFe.WriteToXml();
3. Validando XML contra Schemas XSD
using System.Xml.Schema;
using OpenAC.Net.DFe.Core;
var validador = new XmlSchemaValidation();
validador.AddSchema("http://www.portalfiscal.inf.br/nfe", @"C:\Schemas\nfe_v4.00.xsd");
bool valido = validador.Validar(xmlString, out string erros);
if (!valido)
{
Console.WriteLine($"Erros de validação:\n{erros}");
}
🏛️ Estrutura da Solução
OpenAC.Net.DFe.Core/
├── src/
│ ├── OpenAC.Net.DFe.Core/ # Biblioteca principal (Modelos, Assinatura, Serviços)
│ ├── OpenAC.Net.DFe.Generator/ # Roslyn Incremental Source Generator
│ ├── OpenAC.Net.DFe.Generator.Sample/# Projeto de demonstração
│ └── OpenAC.Net.DFe.Core.Tests/ # Suíte unificada de testes unitários (TUnit)
🧪 Executando os Testes
Os testes unitários cobrem todos os tipos de campos, coleções, dicionários, CDATA, enums, interfaces polimórficas e o próprio Source Generator.
Para executar os testes via linha de comando:
dotnet test
🤝 Como Contribuir
Contribuições da comunidade são muito bem-vindas!
- Faça um Fork do repositório.
- Crie uma Branch para sua funcionalidade ou correção:
git checkout -b feature/minha-melhoria - Garanta que todos os testes passem:
dotnet test - Envie seus commits com mensagens descritivas:
git commit -m "feat: adiciona suporte ao novo campo" - Abra um Pull Request.
💬 Comunidade
Participe da comunidade de desenvolvedores do OpenAC .Net:
- 💬 Discord: Participe do nosso servidor
- 🌐 Portal Oficial: openac.net.br
📄 Licença
Este projeto é distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 is compatible. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.2
- OpenAC.Net.Core (>= 1.6.0)
-
.NETFramework 4.7
- OpenAC.Net.Core (>= 1.6.0)
-
.NETFramework 4.8
- OpenAC.Net.Core (>= 1.6.0)
-
.NETStandard 2.0
- OpenAC.Net.Core (>= 1.6.0)
- System.Drawing.Common (>= 10.0.11)
- System.Security.Cryptography.Xml (>= 10.0.11)
-
net6.0
- OpenAC.Net.Core (>= 1.6.0)
- System.Drawing.Common (>= 10.0.11)
- System.Security.Cryptography.Xml (>= 10.0.11)
-
net7.0
- OpenAC.Net.Core (>= 1.6.0)
- System.Drawing.Common (>= 10.0.11)
- System.Security.Cryptography.Xml (>= 10.0.11)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on OpenAC.Net.DFe.Core:
| Package | Downloads |
|---|---|
|
OpenAC.Net.NFSe
Biblioteca para emissão e trasmissão de NFSe (Nota Fiscal de Serviço Eletrônica). |
|
|
OpenAC.Net.Sat
Biblioteca para utilização do SAT/MFe |
|
|
OpenAC.Net.NFSe.Nacional
Biblioteca para emissão e trasmissão de NFSe (Nota Fiscal de Serviço Eletrônica) Padrão Nacional. |
|
|
OpenAC.Net.GNRe
Projeto para consumo do webservice de Gnre nacional |
|
|
OpenAC.Net.NFSe.DANFSe.FastReport.OpenSource
Biblioteca de impressão de DANFSe usando o FastReport OpenSource. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on OpenAC.Net.DFe.Core:
| Repository | Stars |
|---|---|
|
OpenAC-Net/OpenAC.Net.NFSe
Biblioteca para emissão e transmissão de NFSe.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.7.0.1 | 161 | 8/16/2026 |
| 1.6.0.2 | 45,362 | 9/24/2024 |
| 1.6.0.1 | 1,651 | 8/31/2024 |
| 1.6.0-beta.2 | 663 | 5/5/2024 |
| 1.6.0-beta.1 | 905 | 9/29/2023 |
| 1.5.0.2 | 49,925 | 8/27/2022 |
| 1.5.0.1 | 4,062 | 4/25/2022 |
| 1.5.0 | 3,897 | 4/24/2022 |
| 1.5.0-preview.3 | 347 | 4/14/2022 |
| 1.5.0-preview.2 | 363 | 3/29/2022 |
| 1.5.0-preview.1 | 311 | 3/29/2022 |
| 1.2.1.1 | 7,023 | 11/12/2021 |
| 1.2.1 | 2,061 | 11/8/2021 |
| 1.2.1-rc2 | 419 | 11/8/2021 |
| 1.2.1-rc1 | 485 | 11/6/2021 |
| 1.2.1-beta3 | 526 | 10/30/2021 |
| 1.2.1-beta2 | 422 | 10/30/2021 |
| 1.2.1-beta1 | 421 | 10/30/2021 |