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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenAC.Net.DFe.Core" Version="1.7.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenAC.Net.DFe.Core" Version="1.7.0.1" />
                    
Directory.Packages.props
<PackageReference Include="OpenAC.Net.DFe.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenAC.Net.DFe.Core --version 1.7.0.1
                    
#r "nuget: OpenAC.Net.DFe.Core, 1.7.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenAC.Net.DFe.Core@1.7.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenAC.Net.DFe.Core&version=1.7.0.1
                    
Install as a Cake Addin
#tool nuget:?package=OpenAC.Net.DFe.Core&version=1.7.0.1
                    
Install as a Cake Tool

<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).

Nuget version Nuget downloads License: MIT Discord

</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!

  1. Faça um Fork do repositório.
  2. Crie uma Branch para sua funcionalidade ou correção:
    git checkout -b feature/minha-melhoria
    
  3. Garanta que todos os testes passem:
    dotnet test
    
  4. Envie seus commits com mensagens descritivas:
    git commit -m "feat: adiciona suporte ao novo campo"
    
  5. Abra um Pull Request.

💬 Comunidade

Participe da comunidade de desenvolvedores do OpenAC .Net:


📄 Licença

Este projeto é distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
Loading failed