Saját NuGet csomag készítéséhez első körben készítenünk kell egy osztálykönyvtárat, amit közzé szeretnénk tenni NuGet segítségével. NuGet csomagot akkor tudunk készíteni, ha az osztálykönyvtár .NET Standard alapú.
Visual Studio-n belül a projekt tulajdonságain belül találunk egy Package menüpontot.
Itt első körben jelöljük be a Generate NuGet package on build opciót, majd a Require license acceptance lehetőséget.
Ezzel meg is van a csomag generálása. Webes publikáláshoz azonban ki kell tölteni az Author (Szerző), Company (Cég), Product (Termék) és Description (Leírás) mezőket, valamint szükségünk lesz egy licenc szövegre is.
A további, opcionális mezők kitöltése nagy mértékben megkönnyíti a csomagunk felfedezhetőségét, megtalálhatóságát.
Az elkészült NuGet fájl a https://www.nuget.org/packages/manage/upload címen tölthető fel a központi tárolóba. Ehhez regisztrálnunk kell egy felhasználói fiókot vagy használhatjuk a Microsoft fiókunkat is.
A projekt kimeneti mappájában fordítás után találunk egy .nupkg kiterjesztésű fájlt. Ez lényegében egy zip fájl, ami tartalmazza a lefordított kódot és a Package lapon megadott meta információkat. Ezt kell feltöltenünk a rendszerbe.
A feltöltés során hibák és figyelmeztetések formájában megkapjuk, ha valami nem stimmel a csomagunkkal. Ha minden rendben ment, akkor a csomagunk átnézés és ellenőrzés után bárki által letölthetővé válik.
Az ellenőrzési folyamat részben automatizált, de emberi beavatkozást is igényelhet. Éppen ezért feltöltés után akár 48 óra is eltelhet, mire elérhetővé válik a csomagunk.
Ha nem .NET Standard alapú csomagot szeretnénk feltölteni, akkor arra is lehetőségünk van, de ebben az esetben nem kapunk beépített Visual Studio csomag készítő segítséget. Ez azt jelenti, hogy a csomag leíró meta adatokat manuálisan kell megszerkesztenünk és manuálisan kell összeállítanunk az nupkg fájlt a NuGet parancssoros változatával, ami szintén a nuget.org címről szerezhető be.
Opcionálisan használhatjuk a NuGet Package Explorer eszközt is, amit a Microsoft Store-ból a https://www.microsoft.com/store/apps/9wzdncrdmdm3 címen telepíthetünk vagy a program github oldaláról tudjuk letölteni, ami a https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases címen található meg.
A NuGet Package Explorer egy grafikus eszköz NuGet csomagok készítésére, módosítására és letöltésére. Képességeiben jóval túlmutat a Visual Studio beépített szerkesztőjén.
További hátrány a nem .NET Standard alapú csomag készítés esetén, hogy ha több .NET keretrendszert (pl. 3.5 és 4.5) szeretnénk támogatni, akkor bizony több projekt fájlra lesz szükségünk a különböző keretrendszerekhez. Ilyenkor a legegyszerűbb, ha az SLN fájlunkba létrehozunk még egy projektet és a már meglévő projektből a kódot átlinkeljük1 az új projektbe és az új projekt cél keretrendszerét módosítjuk.
-
A C# fájl hozzáadása dialógus ablakban lehetőségünk van a fájl linkelésére. Ebben az esetben a fájl az eredeti projekt része marad fizikailag, csak hozzárendelődik az új projekthez is. Így a fájl módosulása hatással lesz az összes projektre, amiben szerepel.↩
2025.02.20. @ 08:04
Miután enneka bejegyzésnek a segítségével elkészítettem és publikáltam életem első nuget-csomagját, a bejegyzést lényeges elemmel egészíteném ki:
– Ha Visual Studioval generáljuk a nuget csomagot, akkor kapunk mellé egy `.symbols.nupkg` csomagot is. Ez egyelőre támogatott, de csak kompatibilitási okokból. A `nuget.org` symbol szervere csak `.snupk` formátumot fogad el. Ezt a legegyszerűbben úgy generálhatjuk a `.nupkg` fájllal együtt, ha a `.csproj` fájlba beillesztjük az alábbi propertygroup-ot:
„`xml
true
snupkg
„`
További probléma, hogy a webes feltöltővel ugyanazzal a verzió-számmal csak egy csomagot tudunk a `nuget.org` oldalra feltölteni. Viszont ha a `.nupkg` és `.snupkg` fájl generálása után CLI-s `push` paranccsal töltjük fel a `.nupkg`-ot, az viszi magával az `.snupg` fájlt is:
`nuget SetApiKey Your-API-Key`
`nuget push MyPackage.nupkg`
Részletes leírás és további opciók itt találhatóak:
https://learn.microsoft.com/en-us/nuget/create-packages/symbol-packages-snupkg
A másik, kisebb vacakolás, hogy a README.md fájlba lokálisan belinkelt képfájlokat a `nuget.org` szervere letiltja, nem fogadja el megbízható forrásnak. Ezt pedig magának a github-nak a segítségével lehet nagyon könnyen megoldani:
https://github.com/orgs/community/discussions/44370
2025.02.20. @ 08:14
Az xml-kódot fent megette a html-cica. Hátha így sikerül megjeleníteni:
<PropertyGroup>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>