Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Amikor létrehoz egy NuGet-csomagot a kódból, ezt a funkciót egy olyan összetevőbe csomagolja, amely bármely más fejlesztővel megosztható és használható. Ez a cikk azt ismerteti, hogyan hozhat létre csomagot az MSBuild használatával. Az MSBuild előre telepítve van minden Olyan Visual Studio-számítási feladattal, amely nuGetet tartalmaz. Emellett az MSBuild parancsot is használhatja a dotnet parancssori felületén a dotnet msbuild használatával.
Az SDK-stílusú formátumot használó .NET Core- és .NET Standard-projektek, valamint bármely más SDK-stílusú projekt esetében a NuGet közvetlenül a projektfájlban lévő információkat használja egy csomag létrehozásához. Nem SDK-stílusú projektek esetén a <PackageReference>NuGet a projektfájlt is használja egy csomag létrehozásához.
Az SDK-stílusú projektekben alapértelmezés szerint elérhető a csomagfunkció. Nem SDK stílusú PackageReference-projektek esetén alapértelmezés szerint a Visual Studio 2026-tól is elérhető. A Visual Studio korábbi verzióiban hozzá kell adnia a NuGet.Build.Tasks.Pack csomagot a projektfüggőségekhez, és javasoljuk, hogy a Visual Studio 2026-ra való frissítéskor távolítsa el ezt a csomaghivatkozást. Az MSBuild-csomagok céljairól további információt a NuGet-csomag és a visszaállítás MSBuild-célként című témakörben talál.
Az SDK-stílusú projektek msbuild -t:pack funkcionálisan egyenértékűek a dotnet pack.
Fontos
Ez a témakör SDK-stílusú projektekre, jellemzően .NET Core- és .NET Standard-projektekre, valamint a PackageReference-t használó nem SDK-stílusú projektekre vonatkozik.
Tulajdonságok beállítása
A csomag létrehozásához a következő tulajdonságok szükségesek.
-
PackageId, a csomagazonosítót, amelynek egyedinek kell lennie a csomagot üzemeltető katalógusban. Ha nincs megadva, az alapértelmezett érték a következőAssemblyName: . -
Version, egy adott verziószám a Major.Minor.Patch[-Utótag] formában, ahol a -Utótag azonosítja a kiadás előtti verziókat. Ha nincs megadva, az alapértelmezett érték 1.0.0. - A csomag címe, ahogy a kiszolgálón megjelenjen (például nuget.org)
-
Authors, szerzői és tulajdonosi információk. Ha nincs megadva, az alapértelmezett érték a következőAssemblyName: . -
Company, a vállalat neve. Ha nincs megadva, az alapértelmezett érték a következőAssemblyName: .
Ha nem SDK-stílusú, PackageReference-t használó projekteket csomagol, a következőkre van szükség:
-
PackageOutputPath, a csomag hívása során létrehozott csomag kimeneti mappája.
A Visual Studióban beállíthatja ezeket az értékeket a projekttulajdonságokban (kattintson a jobb gombbal a projektre a Megoldáskezelőben, válassza a Tulajdonságok lehetőséget, és válassza a Csomag fület). Ezeket a tulajdonságokat közvetlenül a projektfájlokban (.csproj) is beállíthatja.
<PropertyGroup>
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
Fontos
Adjon meg egy egyedi azonosítót a csomagnak nuget.org vagy bármilyen használt csomagforrásban.
Az alábbi példa egy egyszerű, teljes projektfájlt mutat be, amely tartalmazza ezeket a tulajdonságokat.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
</Project>
Beállíthatja az opcionális tulajdonságokat is, például TitlePackageDescriptionaz PackageTags, a függőségi objektumok szabályozása és a NuGet metaadat-tulajdonságainak leírása szerint.
Megjegyzés:
A nyilvános használatra készült csomagok esetében különös figyelmet kell fordítani a PackageTags tulajdonságra, mivel a címkék segítenek másoknak megtalálni a csomagot, és megérteni, hogy mit tesz.
A függőségek deklarálásáról és a verziószámok megadásáról további információt a Csomaghivatkozások projektfájlokban és a Csomag verziószámozása című témakörben talál. Lehetőség van arra is, hogy a csomagban lévő függőségek elemeit közvetlenül elérhetővé tegyük a <IncludeAssets> és <ExcludeAssets> attribútumok használatával. További információ: Függőségi eszközök szabályozása.
Opcionális leírásmező hozzáadása
A csomag opcionális leírása megjelenik a csomag nuget.org oldalÁNAK README lapján. A leírás kivonatolja a <Description> projektfájlból vagy a $description.nuspec fájlból.
Az alábbi példa egy Description .NET-csomag .csproj fájljában látható:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://learn.microsoft.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://learn.microsoft.com/rest/api/storageservices/
REST API Reference for Blob Service - https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
Válasszon egyedi csomagazonosítót, és állítsa be a verziószámot
A csomagazonosító és a verziószám egyedileg azonosítja a csomagban található pontos kódot.
Kövesse az alábbi ajánlott eljárásokat a csomagazonosító létrehozásához:
Az azonosítónak egyedinek kell lennie nuget.org és a csomagot üzemeltető összes többi helyen. Az ütközések elkerülése érdekében érdemes a cég nevét használni az azonosító első részeként.
Kövesse a .NET-névtérhez hasonló elnevezési konvenciót pont jelöléssel. Például használja
Contoso.Utility.UsefulStuffahelyettContoso-Utility-UsefulStuffvagyContoso_Utility_UsefulStuff. A felhasználók számára is hasznos, ha a csomagazonosítót a kód által használt névtérrel egyezteti.Ha olyan mintakódot tartalmazó csomagot hoz létre, amely bemutatja, hogyan használható egy másik csomag, fűzze hozzá a
.Sample-t az azonosítóhoz, ahogyan aContoso.Utility.UsefulStuff.Sample-nál.A mintacsomag függőséget mutat az eredeti csomagtól. A mintacsomag létrehozásakor adja hozzá a
<IncludeAssets>-t azcontentFilesértékkel. A tartalommappában rendezze el a mintakódot egy \Samples\<identifier> nevű mappában, például \Samples\Contoso.Utility.UsefulStuff.Sample.
A csomagverzió beállításához kövesse az alábbi ajánlott eljárásokat:
Általában állítsa be a csomag verzióját a projekt vagy a szerelvény verziójának megfelelőre, bár ez nem feltétlenül szükséges. A verzió illesztése egyszerű, ha a csomagot egyetlen összeállításra korlátozni. Maga a NuGet a csomagverziókkal foglalkozik a függőségek feloldásakor, nem pedig a szerelvényverziókkal.
Ha nem szabványos verziósémát használ, mindenképpen vegye figyelembe a NuGet verziószámozási szabályait a csomagverzió-használatban leírtak szerint. A NuGet többnyire Szemantikai verziószámozás 2.0.0-val kompatibilis.
Megjegyzés:
A függőségfeloldással kapcsolatos további információkért lásd: Függőségfeloldás PackageReference használatával. A verziószámozás megértését segítő információkért tekintse meg ezt a blogbejegyzés-sorozatot:
Projekt konfigurálása csomaghoz
Az SDK-stílusú projektek nem igényelnek további konfigurációt.
A nem SDK-stílusú projekteknek legalább egy csomagra van szükségük (a PackageReference-en keresztül, nem packages.config), vagy a projektnek kifejezetten meg kell kérnie a NuGetet, hogy a tulajdonságon keresztül RestoreProjectStyle kezelje a projektet PackageReference-projektként.
A Visual Studio 2022 és korábbi verziói nem rendelkeznek beépített csomagokkal, ezért telepítenie kell a NuGet.Build.Tasks.Pack csomagot is. A Visual Studio 2026-ra vagy újabb verzióra való frissítéskor javasoljuk a csomag eltávolítását, hogy kihasználhassa az új funkciók és hibajavítások előnyeit.
Szerkessze a projektfájlt.
Ha kifejezetten arra szeretné utasítani a NuGetet, hogy a projektet PackageReference-ként kezelje (a projekt nem rendelkezik telepített csomagokkal), keressen vagy adjon hozzá egy
<PropertyGroup>olyan fájlt, amely nem rendelkezik utasítássalCondition, és adja hozzá a következőt:<PropertyGroup> <!-- other properties --> <RestoreProjectStyle>PackageReference</RestoreProjectStyle> <!-- more properties are allowed --> </PropertyGroup>Ha Visual Studio 2022-es vagy korábbi verziót használ, az elem után adja hozzá a
<PropertyGroup>következőket:<ItemGroup> <!-- ... --> <PackageReference Include="NuGet.Build.Tasks.Pack" Version="6.14.0" PrivateAssets="all" /> <!-- ... --> </ItemGroup>Nyisson meg egy fejlesztői parancssort (A Keresőmezőbe írja be a Fejlesztői parancssort).
A Visual Studio fejlesztői parancssorát általában a Start menüből szeretné elindítani, mivel az az MSBuild összes szükséges elérési útjával konfigurálva lesz.
Váltson a projektfájlt tartalmazó mappára, és írja be a következő parancsot a NuGet.Build.Tasks.Pack csomag visszaállításához.
# Uses the project file in the current folder by default msbuild -t:restoreGyőződjön meg arról, hogy az MSBuild kimenet azt jelzi, hogy a build sikeresen befejeződött.
Futtassa az msbuild -t:pack parancsot
Ha NuGet-csomagot (fájlt .nupkg ) szeretne létrehozni a projektből, futtassa a msbuild -t:pack parancsot, amely automatikusan létrehozza a projektet is:
A Visual Studio Fejlesztői parancssorában írja be a következő parancsot:
# Uses the project file in the current folder by default
msbuild -t:pack
A kimenet a fájl elérési útját jeleníti meg .nupkg .
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 8/5/2019 3:09:15 PM.
Project "C:\Users\username\source\repos\ClassLib_DotNetStandard\ClassLib_DotNetStandard.csproj" on node 1 (pack target(s)).
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
...
CopyFilesToOutputDirectory:
Copying file from "C:\Users\username\source\repos\ClassLib_DotNetStandard\obj\Debug\netstandard2.0\ClassLib_DotNetStandard.dll" to "C:\Use
rs\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.dll".
ClassLib_DotNetStandard -> C:\Users\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.dll
Copying file from "C:\Users\username\source\repos\ClassLib_DotNetStandard\obj\Debug\netstandard2.0\ClassLib_DotNetStandard.pdb" to "C:\Use
rs\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.pdb".
GenerateNuspec:
Successfully created package 'C:\Users\username\source\repos\ClassLib_DotNetStandard\bin\Debug\AppLogger.1.0.0.nupkg'.
Done Building Project "C:\Users\username\source\repos\ClassLib_DotNetStandard\ClassLib_DotNetStandard.csproj" (pack target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.21
Build elkészítésekor automatikusan generáljon csomagot
Ha a projekt létrehozásakor vagy visszaállításakor automatikusan szeretné futtatni a msbuild -t:pack elemet, adja hozzá a következő sort a projektfájlba a <PropertyGroup> keretén belül.
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Amikor a msbuild -t:pack futtatása történik egy megoldáson, ez csomagolja a megoldás összes projektjét, amely csomagolható (ahol a <IsPackable> tulajdonság értéke true-re van állítva).
Megjegyzés:
Amikor automatikusan létrehozza a csomagot, a csomagolás ideje növeli a projekt felépítési idejét.
Csomag telepítésének tesztelése
A csomagok közzététele előtt általában tesztelni kell a csomag projektbe való telepítésének folyamatát. A tesztek biztosítják, hogy a feltétlenül szükséges fájlok a projekt megfelelő helyeihez kerülnek.
A telepítéseket manuálisan is tesztelheti a Visual Studióban vagy a parancssorban a normál csomagtelepítési lépésekkel.
Fontos
A csomagok nem módosíthatók. Ha kijavított egy hibát, módosítsa újra a csomag és a csomag tartalmát, az újratesztelésekor a csomag régi verzióját fogja használni, amíg el nem törli a globális csomagok mappáját . Ez különösen akkor fontos, ha olyan csomagokat tesztel, amelyek nem használnak egyedi előzetes címkét minden builden.
Következő lépések
Miután létrehozott egy csomagot, amely egy .nupkg fájl, közzéteheti azt az Ön által választott gyűjteményben, a csomag közzétételekor leírtak szerint.
Érdemes lehet kibővíteni a csomag képességeit, vagy más módon támogatni az alábbi témakörökben ismertetett egyéb forgatókönyveket:
- NuGet-csomag és visszaállítás MSBuild-célként
- Csomag verziószámozása
- Több cél-keretrendszer támogatása
- Forrás- és konfigurációs fájlok átalakítása
- Lokalizáció
- Kiadás előtti verziók
- Csomagtípus beállítása
- MSBuild kellékek és célok
- Csomagok létrehozása COM interop szerelvényekkel
Végül további csomagtípusokat is figyelembe kell venni: