====== 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'':
OpenSsl.Native
3.6.0
Il vostro nome
Librerie native OpenSSL 3.6.0 con supporto Post-Quantum
openssl cryptography post-quantum ml-dsa ml-kem
----
===== 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:
==== 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:
net8.0
OpenSsl.Native
3.6.0
Il vostro nome
Librerie native OpenSSL 3.6.0
true
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 ====
----
===== 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 =====
* [[.:verteilung:nuget-paket|Pubblicare pacchetto NuGet]]
* [[.:verteilung:start|6. Distribuzione]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//