The attribute plugin is not available, 2fa disabled
Inhaltsverzeichnis
5.2 NuGet Basics
This page explains what NuGet is and how to create packages for native libraries.
What is NuGet?
NuGet is the package manager for .NET - comparable to:
- npm for JavaScript
- pip for Python
- Maven for Java
A NuGet package (.nupkg) contains:
- Compiled DLLs
- Metadata (name, version, author)
- Native libraries (optional)
Why a NuGet Package?
| Without NuGet | With NuGet |
| ————— | ———— |
| Copy DLLs manually | dotnet add package … |
| Manage versions manually | Automatic updates |
| Each project separately | Central repository |
Package Structure for Native Libraries
NuGet supports native DLLs via runtimes/:
MyPackage.1.0.0.nupkg/ ├── lib/ │ └── net8.0/ │ └── MyPackage.dll # .NET Wrapper ├── runtimes/ │ ├── win-x64/ │ │ └── native/ │ │ ├── libcrypto-3-x64.dll │ │ └── libssl-3-x64.dll │ └── linux-x64/ │ └── native/ │ ├── libcrypto.so.3 │ └── libssl.so.3 └── MyPackage.nuspec
Simple .nuspec Example
Create a file OpenSsl.Native.nuspec:
<?xml version="1.0"?> <package> <metadata> <id>OpenSsl.Native</id> <version>3.6.0</version> <authors>Your Name</authors> <description>OpenSSL 3.6.0 Native Libraries with 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>
Create Package
1. Prepare Files
# Create directory structure mkdir nuget-package mkdir nuget-package\win-x64 mkdir nuget-package\linux-x64 # Copy DLLs 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\ # Create .nuspec (see above)
2. Build Package
cd nuget-package # Install NuGet CLI (if not present) winget install Microsoft.NuGet # Create package nuget pack OpenSsl.Native.nuspec # Result: OpenSsl.Native.3.6.0.nupkg
Local NuGet Feed
For internal use you can set up a local NuGet feed:
1. Create Feed Folder
mkdir C:\NuGetFeed
copy OpenSsl.Native.3.6.0.nupkg C:\NuGetFeed\
2. Register Feed in NuGet.config
Create NuGet.config in project folder:
<?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. Use Package
dotnet add package OpenSsl.Native --version 3.6.0 --source C:\NuGetFeed
With .NET SDK Pack
Alternatively you can pack directly from .csproj:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <PackageId>OpenSsl.Native</PackageId> <Version>3.6.0</Version> <Authors>Your Name</Authors> <Description>OpenSSL 3.6.0 Native Libraries</Description> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup> <ItemGroup> <None Include="runtimes\**\*" Pack="true" PackagePath="runtimes\" /> </ItemGroup> </Project>
Then:
dotnet pack -c Release
Network Feed Setup
For teams: Feed on network drive
Server Side
# Create share (as Admin) New-SmbShare -Name "NuGetFeed" -Path "D:\NuGetFeed" -ReadAccess "Everyone"
Client Side
<!-- NuGet.config --> <configuration> <packageSources> <add key="InternalFeed" value="\\server\NuGetFeed" /> </packageSources> </configuration>
Tips
Versioning:
- Semantic Versioning:
MAJOR.MINOR.PATCH - OpenSSL 3.6.0 → Package 3.6.0
- Own fixes → 3.6.0.1, 3.6.0.2
No secrets in packages!
- No API keys
- No private keys
- No passwords in configurations
Continue to
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: on 2026/01/29 at 09:22 PM