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:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>OpenSsl.Native</id>
    <version>3.6.0</version>
    <authors>Ihr Name</authors>
    <description>OpenSSL 3.6.0 Native Libraries mit Post-Quantum Support</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>

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:

<?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. 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:

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

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

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

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


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

Zuletzt geändert: den 29.01.2026 um 15:14