====== 5.2 NuGet-Grundlagen ======
Diese Seite erklärt, was NuGet ist und wie Sie Pakete für native Libraries erstellen.
----
===== Was ist NuGet? =====
**NuGet** ist der Paketmanager für .NET - vergleichbar mit:
* npm für JavaScript
* pip für Python
* Maven für Java
Ein NuGet-Paket (''.nupkg'') enthält:
* Kompilierte DLLs
* Metadaten (Name, Version, Autor)
* Native Libraries (optional)
----
===== Warum ein NuGet-Paket? =====
| Ohne NuGet | Mit NuGet |
|------------|-----------|
| DLLs manuell kopieren | ''dotnet add package ...'' |
| Versionen händisch verwalten | Automatische Updates |
| Jedes Projekt einzeln | Zentrales Repository |
----
===== Paket-Struktur für native Libraries =====
NuGet unterstützt native DLLs über ''runtimes/'':
MeinPaket.1.0.0.nupkg/
├── lib/
│ └── net8.0/
│ └── MeinPaket.dll # .NET Wrapper
├── runtimes/
│ ├── win-x64/
│ │ └── native/
│ │ ├── libcrypto-3-x64.dll
│ │ └── libssl-3-x64.dll
│ └── linux-x64/
│ └── native/
│ ├── libcrypto.so.3
│ └── libssl.so.3
└── MeinPaket.nuspec
----
===== Einfaches .nuspec Beispiel =====
Erstellen Sie eine Datei ''OpenSsl.Native.nuspec'':
OpenSsl.Native
3.6.0
Ihr Name
OpenSSL 3.6.0 Native Libraries mit Post-Quantum Support
openssl cryptography post-quantum ml-dsa ml-kem
----
===== Paket erstellen =====
==== 1. Dateien vorbereiten ====
# Verzeichnisstruktur erstellen
mkdir nuget-package
mkdir nuget-package\win-x64
mkdir nuget-package\linux-x64
# DLLs kopieren
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\
# .nuspec erstellen (siehe oben)
==== 2. Paket bauen ====
cd nuget-package
# NuGet CLI installieren (falls nicht vorhanden)
winget install Microsoft.NuGet
# Paket erstellen
nuget pack OpenSsl.Native.nuspec
# Ergebnis: OpenSsl.Native.3.6.0.nupkg
----
===== Lokales NuGet-Feed =====
Für interne Nutzung können Sie ein lokales NuGet-Feed einrichten:
==== 1. Feed-Ordner erstellen ====
mkdir C:\NuGetFeed
copy OpenSsl.Native.3.6.0.nupkg C:\NuGetFeed\
==== 2. Feed in NuGet.config registrieren ====
Erstellen Sie ''NuGet.config'' im Projektordner:
==== 3. Paket verwenden ====
dotnet add package OpenSsl.Native --version 3.6.0 --source C:\NuGetFeed
----
===== Mit .NET SDK Pack =====
Alternativ können Sie direkt aus dem .csproj packen:
net8.0
OpenSsl.Native
3.6.0
Ihr Name
OpenSSL 3.6.0 Native Libraries
true
Dann:
dotnet pack -c Release
----
===== Netzwerk-Feed einrichten =====
Für Teams: Feed auf Netzlaufwerk
==== Server-Seite ====
# Share erstellen (als Admin)
New-SmbShare -Name "NuGetFeed" -Path "D:\NuGetFeed" -ReadAccess "Everyone"
==== Client-Seite ====
----
===== Tipps =====
**Versionierung:**
* Semantic Versioning: ''MAJOR.MINOR.PATCH''
* OpenSSL 3.6.0 → Paket 3.6.0
* Eigene Fixes → 3.6.0.1, 3.6.0.2
**Keine Secrets in Paketen!**
* Keine API-Keys
* Keine Private Keys
* Keine Passwörter in Konfigurationen
----
===== Weiter zu =====
* [[.:verteilung:nuget-paket|NuGet-Paket veröffentlichen]]
* [[.:verteilung:start|6. Verteilung]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//