Questa pagina spiega cos'è NuGet e come creare pacchetti per librerie native.
NuGet è il gestore di pacchetti per .NET - paragonabile a:
Un pacchetto NuGet (.nupkg) contiene:
| Senza NuGet | Con NuGet |
| ————- | ———– |
| Copiare DLL manualmente | dotnet add package … |
| Gestire versioni a mano | Aggiornamenti automatici |
| Ogni progetto singolarmente | Repository centralizzato |
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
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 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)
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
Per uso interno potete configurare un feed NuGet locale:
mkdir C:\NuGetFeed
copy OpenSsl.Native.3.6.0.nupkg C:\NuGetFeed\
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>
dotnet add package OpenSsl.Native --version 3.6.0 --source C:\NuGetFeed
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
Per i team: Feed su unità di rete
# Creare condivisione (come Admin) New-SmbShare -Name "NuGetFeed" -Path "D:\NuGetFeed" -ReadAccess "Everyone"
<!-- NuGet.config --> <configuration> <packageSources> <add key="InternalFeed" value="\\server\NuGetFeed" /> </packageSources> </configuration>
Versionamento:
MAJOR.MINOR.PATCHNiente segreti nei pacchetti!
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional