Publicar bibliotecas no NuGet.org é uma excelente forma de compartilhar código reutilizável com a comunidade ou entre times internos.
Com o .NET 8, o processo ficou ainda mais simples e pode ser feito inteiramente pelo terminal (CLI) ou VSCode, sem depender do Visual Studio completo.
Sumário
- Introdução ao NuGet
- Criação de Conta e API Key
- Estrutura do Projeto e Preparação do
.csproj - Gerando o Pacote com
dotnet pack - Publicando com
dotnet nuget push - Configuração Local (
nuget.config) - Boas Práticas e Dicas de Segurança
- Cenários Avançados e Automação CI/CD
- Referências
Introdução ao NuGet
O NuGet é o gerenciador de pacotes oficial do ecossistema .NET. Ele permite empacotar e distribuir bibliotecas (.dlls) com metadados descritivos, versões e dependências.
Os pacotes são publicados no NuGet.org (repositório público) ou em feeds privados (como Azure Artifacts, GitHub Packages ou repositórios internos).
Criação de Conta e API Key
Criar conta
- Acesse https://www.nuget.org
- Faça login com uma conta Microsoft ou GitHub.
- Crie um perfil público.
Gerar a API Key
- Vá em Your Account → API Keys → + Create
- Configure:
- Key name: nome descritivo (ex:
mfa-shield-publish) - Expiration: 1 ano (ou menos)
- Scope: “Push new packages and package versions”
- Glob pattern:
*(ouMyCompany.*se quiser restringir)
- Key name: nome descritivo (ex:
- Clique em Create e copie a API Key (mostrada apenas uma vez).
⚠️ Guarde em local seguro!
Não versionar ou compartilhar a chave. Use variáveis de ambiente ou GitHub Secrets.
Estrutura do Projeto e Preparação do .csproj
Certifique-se de que sua biblioteca segue uma estrutura clara, por exemplo:
/src
/MyLibrary
MyLibrary.csproj
/Models
/Services
/tests
/MyLibrary.Tests
Exemplo de .csproj completo para NuGet:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<Authors>Eryx Guimarães</Authors>
<Company>EryxGuimaraes</Company>
<Description>Biblioteca de autenticação MFA modular para .NET 8</Description>
<PackageId>MfaShield</PackageId>
<PackageTags>security;authentication;mfa;totp</PackageTags>
<RepositoryUrl>https://github.com/eryxguimaraes/MfaShield</RepositoryUrl>
<PackageProjectUrl>https://github.com/eryxguimaraes/MfaShield</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReadmeFile>README.md</PackageReadmeFile>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="" />
</ItemGroup>
</Project>
Dica: Sempre inclua README.md, LICENSE, e defina PackageId de forma única (ex:
CompanyName.LibraryName).
Gerando o Pacote com dotnet pack
No terminal (VSCode integrado ou PowerShell):
dotnet pack -c Release
Isso gera um arquivo .nupkg dentro da pasta:
bin/Release/MfaShield.1.0.0.nupkg
Para confirmar o conteúdo:
nuget list *.nupkg
Ou inspecione diretamente:
dotnet nuget locals global-packages --list
Publicando com dotnet nuget push
Método 1 – Linha direta com chave:
dotnet nuget push "bin/Release/MfaShield.1.0.0.nupkg" \
--api-key YOUR_API_KEY \
--source https://api.nuget.org/v3/index.json
Método 2 – Via configuração local (nuget.config)
Crie o arquivo ~/.nuget/NuGet/NuGet.Config (ou no projeto):
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<apikeys>
<add key="https://api.nuget.org/v3/index.json" value="YOUR_API_KEY" />
</apikeys>
</configuration>
Agora basta:
dotnet nuget push "bin/Release/MfaShield.1.0.0.nupkg" --source nuget.org
Configuração Local (nuget.config)
Para projetos corporativos ou com múltiplos feeds:
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="azure-artifacts" value="https://pkgs.dev.azure.com/contoso/_packaging/private-feed/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<azure-artifacts>
<add key="Username" value="username" />
<add key="ClearTextPassword" value="PAT_OR_TOKEN" />
</azure-artifacts>
</packageSourceCredentials>
</configuration>
Use o
nuget.configna raiz da solução quando quiser compartilhar a configuração com outros desenvolvedores.
Boas Práticas e Dicas de Segurança
| Boas práticas | Explicação |
|---|---|
| Versionamento semântico | Use MAJOR.MINOR.PATCH (ex: 1.0.0 → 1.1.0 → 2.0.0) |
| README e LICENSE inclusos | Reforçam confiabilidade e documentação pública |
| Pacotes assinados | Use certificados de assinatura com nuget sign |
| Evite expor a API key | Prefira variáveis de ambiente (NUGET_API_KEY) |
| Automatize via CI/CD | Use GitHub Actions, Azure DevOps ou GitLab |
Use snupkg para debug symbols | Facilita depuração no Visual Studio |
| Prefixe pacotes internos | Ex: CompanyName.* para distinguir do público |
Cenários Avançados e Automação CI/CD
Publicação automática via GitHub Actions
name: Publish to NuGet
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Build and Pack
run: dotnet pack -c Release
- name: Publish to NuGet
run: dotnet nuget push "src/**/bin/Release/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
Adicione
NUGET_API_KEYnos Secrets do repositório GitHub.
Referências
- Documentação oficial do NuGet.org
- Início Rápido: Criar e publicar um pacote NuGet usando o Visual Studio (somente Windows)
- CLI
dotnet nuget - Criação e publicação de pacotes
- Boas práticas de empacotamento NuGet
Conclusão
Com o .NET 8 e o CLI unificado, publicar pacotes no NuGet ficou mais direto e seguro.
Usar o VSCode e pipelines automatizadas permite escalar a distribuição de bibliotecas com qualidade e controle, seja para open source ou ambientes corporativos.
