5.2 Fondamenti NuGet

Questa pagina spiega cos'è NuGet e come creare pacchetti per librerie native.


Cos'è NuGet?

NuGet è il gestore di pacchetti per .NET - paragonabile a:

  • npm per JavaScript
  • pip per Python
  • Maven per Java

Un pacchetto NuGet (.nupkg) contiene:

  • DLL compilate
  • Metadati (nome, versione, autore)
  • Librerie native (opzionale)

Perché un Pacchetto NuGet?

Senza NuGet Con NuGet
————-———–
Copiare DLL manualmente dotnet add package …
Gestire versioni a mano Aggiornamenti automatici
Ogni progetto singolarmente Repository centralizzato

Struttura Pacchetto per Librerie Native

NuGet supporta DLL native tramite runtimes/:

MioPacchetto.1.0.0.nupkg/
├── lib/
│   └── net8.0/
│       └── MioPacchetto.dll        # Wrapper .NET
├── runtimes/
│   ├── win-x64/
│   │   └── native/
│   │       ├── libcrypto-3-x64.dll
│   │       └── libssl-3-x64.dll
│   └── linux-x64/
│       └── native/
│           ├── libcrypto.so.3
│           └── libssl.so.3
└── MioPacchetto.nuspec

Esempio .nuspec Semplice

Create un file OpenSsl.Native.nuspec:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>OpenSsl.Native</id>
    <version>3.6.0</version>
    <authors>Il vostro nome</authors>
    <description>Librerie native OpenSSL 3.6.0 con supporto Post-Quantum</description>
    <tags>openssl cryptography post-quantum ml-dsa ml-kem</tags>
  </metadata>
  <files>
    <!-- Windows x64 -->
    <file src="win-x64\libcrypto-3-x64.dll" target="runtimes\win-x64\native\" />
    <file src="win-x64\libssl-3-x64.dll" target="runtimes\win-x64\native\" />
 
    <!-- Linux x64 -->
    <file src="linux-x64\libcrypto.so.3" target="runtimes\linux-x64\native\" />
    <file src="linux-x64\libssl.so.3" target="runtimes\linux-x64\native\" />
  </files>
</package>

Creare il Pacchetto

1. Preparare i File

# Creare struttura directory
mkdir nuget-package
mkdir nuget-package\win-x64
mkdir nuget-package\linux-x64
 
# Copiare le DLL
copy "D:\Projects\openssl-3.6.0\bin\bin\libcrypto-3-x64.dll" nuget-package\win-x64\
copy "D:\Projects\openssl-3.6.0\bin\bin\libssl-3-x64.dll" nuget-package\win-x64\
 
# Creare .nuspec (vedi sopra)

2. Compilare il Pacchetto

cd nuget-package
 
# Installare NuGet CLI (se non presente)
winget install Microsoft.NuGet
 
# Creare il pacchetto
nuget pack OpenSsl.Native.nuspec
 
# Risultato: OpenSsl.Native.3.6.0.nupkg

Feed NuGet Locale

Per uso interno potete configurare un feed NuGet locale:

1. Creare Cartella Feed

mkdir C:\NuGetFeed
copy OpenSsl.Native.3.6.0.nupkg C:\NuGetFeed\

2. Registrare Feed in NuGet.config

Create NuGet.config nella cartella del progetto:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="LocalFeed" value="C:\NuGetFeed" />
  </packageSources>
</configuration>

3. Usare il Pacchetto

dotnet add package OpenSsl.Native --version 3.6.0 --source C:\NuGetFeed

Con .NET SDK Pack

In alternativa potete creare il pacchetto direttamente dal .csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <PackageId>OpenSsl.Native</PackageId>
    <Version>3.6.0</Version>
    <Authors>Il vostro nome</Authors>
    <Description>Librerie native OpenSSL 3.6.0</Description>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>
 
  <ItemGroup>
    <None Include="runtimes\**\*" Pack="true" PackagePath="runtimes\" />
  </ItemGroup>
</Project>

Poi:

dotnet pack -c Release

Configurare Feed di Rete

Per i team: Feed su unità di rete

Lato Server

# Creare condivisione (come Admin)
New-SmbShare -Name "NuGetFeed" -Path "D:\NuGetFeed" -ReadAccess "Everyone"

Lato Client

<!-- NuGet.config -->
<configuration>
  <packageSources>
    <add key="InternalFeed" value="\\server\NuGetFeed" />
  </packageSources>
</configuration>

Suggerimenti

Versionamento:

  • Semantic Versioning: MAJOR.MINOR.PATCH
  • OpenSSL 3.6.0 → Pacchetto 3.6.0
  • Fix propri → 3.6.0.1, 3.6.0.2

Niente segreti nei pacchetti!

  • Niente chiavi API
  • Niente chiavi private
  • Niente password nelle configurazioni

Continua con


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: il 29/01/2026 alle 21:39