Megosztás a következőn keresztül:


NuGetcélként történő csomagolás és visszaállításMSBuild

NuGet 4.0+

A PackageReference formátummal a 4.0+-os verziók az összes jegyzékbeli metaadatot közvetlenül egy projektfájlban tárolhatják ahelyett, NuGet hogy külön .nuspec fájlt használnak.

A MSBuild 15,1+ verzióval a NuGet is első osztályú MSBuild elem az pack és restore célok tekintetében, ahogyan az alább részletezve van. Ezek a célok lehetővé teszik, hogy a NuGet feladattal vagy céllal úgy dolgozhasson együtt, mint bármely más MSBuild esetén. Ha útmutatást szeretne a csomag használatával történő létrehozásához, olvassa el a csomag használatával történő létrehozása című részt. (A NuGet 3.x és korábbi verziók esetén a pack és restore parancsokat a NuGet CLI használatával kell futtatnia.)

Cél építési sorrendje

pack és restore célok, amelyekhez hozzáférhet, hogy a MSBuild munkafolyamatát továbbfejlessze. Tegyük fel például, hogy a csomagolás után egy hálózati megosztásba szeretné másolni a csomagot. Ehhez adja hozzá a következőt a projektfájlban:

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

Hasonlóképpen megírhat egy MSBuild tevékenységet, megírhatja a saját célját, és felhasználhatja NuGet a MSBuild tevékenység tulajdonságait.

Megjegyzés:

$(OutputPath) relatív, és arra számít, hogy a parancsot a projekt gyökérkönyvtárából futtatod.

csomagcél

Azokban a .NET-projektekben, amelyek a PackageReference formátumot alkalmazzák, a msbuild -t:pack segítségével a projektfájlban található bemeneteket használják fel egy NuGet csomag létrehozásához.

A nem SDK-stílusú projekteknek telepíteniük kell a NuGet. Build.Tasks.Pack csomag a Visual Studio 2022 vagy korábbi verzióiban. Javasoljuk, hogy távolítsa el ezt a csomagot a Visual Studio 2026-ra való frissítéskor, hogy a projekt a legújabb csomagfunkciókat és hibajavításokat használhassa.

Az alábbi táblázat azokat a MSBuild tulajdonságokat ismerteti, amelyek hozzáadhatók egy projektfájlhoz az első <PropertyGroup> csomóponton belül. Ezeket a módosításokat egyszerűen elvégezheti a Visual Studio 2017-ben és újabb verzióiban, ha a jobb gombbal a projektre kattint, és a helyi menüben a Szerkesztés {project_name} lehetőséget választja. Az egyszerűség kedvéért a táblázatot a fájl egyenértékű tulajdonsága .nuspecrendezi.

Megjegyzés:

Owners és Summary tulajdonságok a .nuspec nem támogatottak a MSBuild-val.

Attribútum/nuspec érték MSBuild Ingatlan Alapértelmezett Jegyzetek
Id PackageId $(AssemblyName) $(AssemblyName) től MSBuild
Version PackageVersion verzió Ez semver kompatibilis, például 1.0.0, 1.0.0-beta vagy 1.0.0-beta-00345. Alapértelmezett a(z) Version, ha nincs beállítva.
VersionPrefix VersionPrefix üres A PackageVersion felülírja a VersionPrefix-t
VersionSuffix VersionSuffix üres A PackageVersion felülírja a VersionSuffix-t
Authors Authors Az aktuális felhasználó felhasználóneve A csomagok szerzőinek pontosvesszővel tagolt listája, amely megfelel a nuget.org profilneveinek. Ezek a NuGet galériában jelennek meg a nuget.org-on, és azonos szerzők csomagjainak kereszthivatkozására szolgálnak.
Owners N/A Nincs jelen a következő helyen: nuspec
Title Title $(PackageId) A csomag emberbarát címe, amelyet általában a felhasználói felületen használnak, ugyanúgy jelenik meg, mint a nuget.org és a Visual Studio Csomagkezelője.
Description Description "Csomag leírása" A szerelvény hosszú leírása. Ha PackageDescription nincs megadva, akkor a rendszer ezt a tulajdonságot is használja a csomag leírásaként.
Copyright Copyright üres A csomag szerzői jogi adatai.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false Logikai érték, amely meghatározza, hogy az ügyfélnek fel kell-e kérnie a fogyasztót a csomaglicencek elfogadására a csomag telepítése előtt.
license PackageLicenseExpression üres Megfelel a <license type="expression">-nek. Lásd : Licenckifejezés vagy licencfájl csomagolása.
license PackageLicenseFile üres A csomagban lévő licencfájl elérési útja, ha egyéni licencet vagy spDX-azonosítóval nem rendelkező licencet használ. Kifejezetten be kell csomagolnia a hivatkozott licencfájlt. Megfelel a <license type="file">-nek. Lásd : Licenckifejezés vagy licencfájl csomagolása.
LicenseUrl PackageLicenseUrl üres PackageLicenseUrl már nem ajánlott. Használja inkább a PackageLicenseExpression vagy PackageLicenseFile elemet.
ProjectUrl PackageProjectUrl üres
Icon PackageIcon üres A csomag egy képének elérési útja, amelyet csomagikonként szeretne használni. A hivatkozott ikonképfájlt kifejezetten be kell csomagolnia. További információ: Ikonképfájl és icon metaadatok csomagolása.
IconUrl PackageIconUrl üres PackageIconUrl elavult, és helyette a PackageIcon használata javasolt. A legjobb lefelé irányuló élmény érdekében azonban meg kell adnia PackageIconUrl amellett, hogy PackageIcon.
Readme PackageReadmeFile üres A hivatkozott readme fájlt be kell csomagolnia kifejezetten.
Tags PackageTags üres A csomagot kijelölő címkék pontosvesszővel tagolt listája.
ReleaseNotes PackageReleaseNotes üres Kibocsátási megjegyzések a csomaghoz.
Repository/Url RepositoryUrl üres A forráskód klónozásához vagy lekéréséhez használt adattár URL-címe. Példa: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
Repository/Type RepositoryType üres Az adattár típusa. Példák: git (alapértelmezett), tfs.
Repository/Branch RepositoryBranch üres Nem kötelező adattárág-információk. RepositoryUrl Ezt a tulajdonságot is meg kell adni ahhoz, hogy be legyen véve. Példa: master (NuGet 4.7.0+).
Repository/Commit RepositoryCommit üres Nem kötelező az adattár véglegesítése vagy módosítása, amely jelzi, hogy a csomag melyik forráshoz készült. RepositoryUrl Ezt a tulajdonságot is meg kell adni ahhoz, hogy be legyen véve. Példa: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> A csomag rendeltetését jelzi. A csomagtípusok ugyanazt a formátumot használják, mint a csomagazonosítók, és ; karakterrel vannak elválasztva. A csomagtípusok verziószámozása a , és Version karakterláncok hozzáfűzésével lehetséges. Lásd : NuGet Csomagtípus beállítása (NuGet 3.5.0+).
Summary Nem támogatott

célzott bemenetek csomagolása

Ingatlan Description
IsPackable Logikai érték, amely meghatározza, hogy a projekt csomagolható-e. Az alapértelmezett érték a true.
SuppressDependenciesWhenPacking Úgy van beállítva, hogy true letiltsa a csomagfüggőségeket a létrehozott NuGet csomagból.
PackageVersion Megadja az eredményként kapott csomag verzióját. A NuGet verziósztring összes formáját elfogadja. Az alapértelmezett érték a projekt $(Version) tulajdonságának Version értéke.
PackageId Az eredményként kapott csomag nevét adja meg. Ha nincs megadva, a pack művelet alapértelmezés szerint a csomag neveként használja a AssemblyName könyvtár nevét.
PackageDescription A csomag hosszú leírása a felhasználói felület megjelenítéséhez.
Authors A csomagok szerzőinek pontosvesszővel tagolt listája, amely megfelel a nuget.org profilneveinek. Ezek a NuGet galériában jelennek meg a nuget.org-on, és azonos szerzők csomagjainak kereszthivatkozására szolgálnak.
Description A szerelvény hosszú leírása. Ha PackageDescription nincs megadva, akkor a rendszer ezt a tulajdonságot is használja a csomag leírásaként.
Copyright A csomag szerzői jogi adatai.
PackageRequireLicenseAcceptance Logikai érték, amely meghatározza, hogy az ügyfélnek fel kell-e kérnie a fogyasztót a csomaglicencek elfogadására a csomag telepítése előtt. Az alapértelmezett érték a false.
DevelopmentDependency Logikai érték, amely meghatározza, hogy a csomag csak fejlesztési függőségként van-e megjelölve, ami megakadályozza, hogy a csomag függőségként szerepeljön más csomagokban. A PackageReference (NuGet 4.8+) használatával ez a jelző azt is jelenti, hogy a fordítási időben szükséges eszközök kizárásra kerülnek a fordításból. További információért lásd: DevelopmentDependency támogatás a PackageReference-hez.
PackageLicenseExpression SPDX-licencazonosító vagy -kifejezés, példáulApache-2.0. További információ: Licenckifejezés vagy licencfájl csomagolása.
PackageLicenseFile A csomagban lévő licencfájl elérési útja, ha egyéni licencet vagy spDX-azonosítóval nem rendelkező licencet használ.
PackageLicenseUrl PackageLicenseUrl már nem ajánlott. Használja inkább a PackageLicenseExpression vagy PackageLicenseFile elemet.
PackageProjectUrl
PackageIcon A csomag ikonjának elérési útját adja meg a csomag gyökeréhez viszonyítva. További információ: Ikonképfájl csomagolása.
PackageReleaseNotes Kibocsátási megjegyzések a csomaghoz.
PackageReadmeFile Csomaghoz tartozó readme fájl.
PackageTags A csomagot kijelölő címkék pontosvesszővel tagolt listája.
PackageOutputPath Meghatározza a csomagolt csomag elvetéséhez szükséges kimeneti útvonalat. Az alapértelmezett érték $(OutputPath).
IncludeSymbols Ez a logikai érték azt jelzi, hogy a csomagnak létre kell-e hoznia egy további szimbólumcsomagot a projekt csomagolásakor. A szimbólumcsomag formátumát a SymbolPackageFormat tulajdonság szabályozza. További információ: IncludeSymbols.
IncludeSource Ez a logikai érték azt jelzi, hogy a csomagfolyamatnak létre kell-e hoznia egy forráscsomagot. A forráscsomag tartalmazza a kódtár forráskódját és a PDB-fájlokat. A forrásfájlok a src/ProjectName könyvtár alá kerülnek az eredményként kapott csomagfájlban. További információ: IncludeSource.
PackageType
IsTool Megadja, hogy az összes kimeneti fájl a lib mappa helyett az eszközök mappájába legyen-e másolva. További információ: IsTool.
RepositoryUrl A forráskód klónozásához vagy lekéréséhez használt adattár URL-címe. Példa: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
RepositoryType Az adattár típusa. Példák: git (alapértelmezett), tfs.
RepositoryBranch Nem kötelező adattárág-információk. RepositoryUrl Ezt a tulajdonságot is meg kell adni ahhoz, hogy be legyen véve. Példa: master (NuGet 4.7.0+).
RepositoryCommit Nem kötelező az adattár véglegesítése vagy módosítása, amely jelzi, hogy a csomag melyik forráshoz készült. RepositoryUrl Ezt a tulajdonságot is meg kell adni ahhoz, hogy be legyen véve. Példa: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
SymbolPackageFormat Megadja a szimbólumcsomag formátumát. Ha "symbols.nupkg", akkor egy régi szimbólumcsomag jön létre egy .symbols.nupkg kiterjesztéssel, amely PDF-eket, DLL-eket és egyéb kimeneti fájlokat tartalmaz. Ha "snupkg", létrejön egy snupkg szimbólumcsomag, amely tartalmazza a hordozható PDF-eket. Az alapértelmezett érték a "symbols.nupkg".
NoPackageAnalysis Megadja, hogy pack a csomag létrehozása után ne futtassa a csomagelemzést.
MinClientVersion Meghatározza a csomag telepítéséhez szükséges ügyfél minimális verzióját NuGet , amelyet a nuget.exe és a Visual Studio Package Manager kényszerít.
IncludeBuildOutput Ez a logikai érték határozza meg, hogy a buildkimeneti szerelvényeket a .nupkg fájlba kell-e csomagolni.
IncludeContentInPack Ez a logikai érték azt határozza meg, hogy az eredményül kapott csomag automatikusan tartalmazza-e az adott típusú Content elemeket. Az alapértelmezett érték a true.
BuildOutputTargetFolder Megadja azt a mappát, ahová a kimeneti szerelvényeket helyezni szeretné. A rendszer a kimeneti szerelvényeket (és más kimeneti fájlokat) a megfelelő keretrendszermappákba másolja. További információ: Kimeneti szerelvények.
ContentTargetFolders Megadja az alapértelmezett helyet, ahol az összes tartalomfájlnak el kell mennie, ha PackagePath nincs megadva számukra. Az alapértelmezett érték a "content; contentFiles". További információért lásd: Tartalom csomagba helyezése.
NuspecFile A .nuspec fájl csomagoláshoz használt relatív vagy abszolút elérési útja. Ha meg van adva, az kizárólag csomagolási információkhoz használható, és a projektekben lévő információk nem használhatók fel. További információért lásd .nuspec csomagolása.
NuspecBasePath A fájl alap elérési útja .nuspec . További információért lásd .nuspec csomagolása.
NuspecProperties Kulcs=érték párok pontosvesszővel elválasztott listája. További információért lásd .nuspec csomagolása.

csomagszcenáriók

Függőségek letiltása

Ha el szeretné tiltani a csomagfüggőségeket a létrehozott NuGet csomagból, állítsa be SuppressDependenciesWhenPackingtrue , amely lehetővé teszi az összes függőség kihagyását a generált nupkg-fájlból.

PackageIconUrl

A(z) PackageIconUrl helyett használja a PackageIcon tulajdonságot, mivel az előbbi elavult. Az 5.3-tól kezdve és a Visual Studio 2019 16.3 verziótól a NuGet figyelmeztetést ad ki pack, ha a csomag metaadatai csak egyetlen specifikációt tartalmaznak.

PackageIcon

Jótanács

Annak érdekében, hogy megőrizzék a visszamenőleges kompatibilitást olyan ügyfelekkel és forrásokkal, amelyek még nem támogatják a PackageIcon-t, adja meg mind a PackageIcon-t, mind a PackageIconUrl-t. A Visual Studio támogatja PackageIcon a mappaalapú forrásból érkező csomagokat.

Ikonképfájl csomagolása

Ikonképfájl csomagolásakor használja a PackageIcon tulajdonságot az ikonképfájl elérési útjának megadásához a csomag gyökeréhez viszonyítva. Emellett győződjön meg arról, hogy a fájl szerepel a csomagban. A képfájl mérete legfeljebb 1 MB lehet. A támogatott fájlformátumok közé tartozik a JPEG és a PNG. 128x128 képfelbontást javasoljuk.

Például:

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

Csomagikon minta.

Ennek megfelelőjéhez tekintse meg a nuspecnuspecikonra vonatkozó hivatkozást.

PackageReadmeFile

NuGet Támogatott a 5.10.0 2. előzetes verziójú .NET / SDK 5.0.300 vagy újabb verzió

Olvasófájl csomagolásakor a PackageReadmeFile tulajdonság használatával kell megadnia a csomag elérési útját a csomag gyökeréhez képest. Emellett meg kell győződnie arról, hogy a fájl szerepel a csomagban. A támogatott fájlformátumok közé csak a Markdown (.md) tartozik.

Például:

<PropertyGroup>
    ...
    <PackageReadmeFile>readme.md</PackageReadmeFile>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="docs\readme.md" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

nuspec Ennek megfelelőjeként tekintse meg nuspec a readme referencia-t.

Kimeneti szerelvények

nuget pack a kimeneti fájlokat bővítménnyel .exe, .dll, .xml, .winmd, .json és .pri átmásolja. A másolt kimeneti fájlok attól függnek, hogy a MSBuild mit biztosít a BuiltOutputProjectGroup célból.

A projektfájlban vagy a parancssorban két MSBuild tulajdonsággal szabályozhatja a kimeneti szerelvények helyét:

  • IncludeBuildOutput: Logikai érték, amely meghatározza, hogy a buildkimeneti szerelvényeknek szerepelnie kell-e a csomagban.
  • BuildOutputTargetFolder: Azt a mappát adja meg, amelyben a kimeneti szerelvényeket el kell helyezni. A rendszer a kimeneti szerelvényeket (és más kimeneti fájlokat) a megfelelő keretrendszermappákba másolja.

Csomaghivatkozások

Lásd : Csomaghivatkozások a Project Filesban.

Projektprojektre vonatkozó hivatkozások

A projektről projektre mutató hivatkozások alapértelmezés szerint csomaghivatkozásnak minősülnek NuGet . Például:

<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>

A projekthivatkozáshoz a következő metaadatokat is hozzáadhatja:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Tartalom egy csomagban

Tartalom hozzáadásához adjon hozzá további metaadatokat a meglévő <Content> elemhez. Alapértelmezés szerint minden "Tartalom" típusú elem bekerül a csomagba, kivéve, ha felülbírálja az alábbi bejegyzéseket:

<Content Include="..\win7-x64\libuv.txt">
 <Pack>false</Pack>
</Content>

Alapértelmezés szerint minden hozzá lesz adva a content és a contentFiles\any\<target_framework> mappák gyökeréhez egy csomagon belül, és megőrzi a relatív mappastruktúrát, hacsak nem ad meg egy csomagútvonalat:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

Ha az összes tartalmat csak egy adott gyökérmappába szeretné másolni, ahelyett, hogy content és contentFiles mindkettőbe, használhatja a MSBuild tulajdonságot ContentTargetFolders, amely alapértelmezés szerint "tartalom;contentFiles", de bármely más mappanévre beállítható. Vegye figyelembe, hogy a "contentFiles" ContentTargetFolders megadásakor a fájlokat contentFiles\any\<target_framework> vagy contentFiles\<language>\<target_framework> alá helyezik a buildAction alapján.

PackagePath célútvonalak pontosvesszővel elválasztott halmaza lehet. Ha üres csomag elérési útját adja meg, az hozzáadja a fájlt a csomag gyökeréhez. A következő például hozzáadja libuv.txtcontent\myfilesa , content\samplesés a csomag gyökerét:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>

Van egy MSBuild tulajdonság is $(IncludeContentInPack), amely alapértelmezés szerint a true értéke. Ha ez egy projektre false van állítva, akkor az adott projekt tartalma nem szerepel a nuget-csomagban.

Egyéb csomagspecifikus metaadatok, amelyeket a fenti elemek bármelyikén beállíthat, tartalmazzák az <PackageCopyToOutput> és <PackageFlatten> értékeket, amelyek az CopyToOutput és Flatten értékeket állítják be a kimeneti contentFiles bejegyzésen a nuspec-ban.

Megjegyzés:

A tartalomelemeken kívül a <Pack> és <PackagePath> metaadatok is beállíthatók a fájlokon, amelyek összeállítási művelete lehet Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource vagy None.

Ahhoz, hogy a csomag összefűzhesse a fájlnevet a csomag elérési útjának rövidítési mintáival, a csomag elérési útjának a mappaelválasztó karakterrel kell végződnie, ellenkező esetben a csomag elérési útja a teljes elérési útként lesz kezelve, beleértve a fájlnevet is.

Szimbólumok belefoglalása

Használata MSBuild -t:pack -p:IncludeSymbols=true esetén a megfelelő .pdb fájlok más kimeneti fájlokkal (.dll, .exe, .winmd, .xml, .json, stb. .pri) együtt kerülnek másolásra. Vegye figyelembe, hogy a beállítás IncludeSymbols=true létrehoz egy normál csomagot és egy szimbólumcsomagot.

Forrást tartalmaz

Ez ugyanaz, mint a IncludeSymbols, azzal a különbséggel, hogy a forrásfájlokat a .pdb fájlokkal együtt átmásolja. A Compile típusú összes fájl átmásolásra kerül src\<ProjectName>\ helyre úgy, hogy megőrzi a relatív elérési út mappastruktúráját az eredményül kapott csomagban. Ugyanez történik minden olyan ProjectReference forrásfájllal, amelynek beállítása TreatAsPackageReferencefalse-re van állítva.

Ha egy Fordítás típusú fájl a projektmappán kívül esik, akkor az hozzá van adva a src\<ProjectName>\-hez.

Licenckifejezés vagy licencfájl csomagolása

Licenckifejezés használatakor használja a tulajdonságot PackageLicenseExpression . A mintához lásd a licenckifejezés mintáját.

<PropertyGroup>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

A .org által NuGetelfogadott licenckifejezésekkel és licencekkel kapcsolatos további információkért tekintse meg a licenc metaadatait.

Licencfájl csomagolásakor használja a PackageLicenseFile tulajdonságot a csomaggyökérhez viszonyított csomagútvonal megadásához. Emellett győződjön meg arról, hogy a fájl szerepel a csomagban. Például:

<PropertyGroup>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>

<ItemGroup>
    <None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>

Mintául a licencfájl mintáját tekinti meg.

Megjegyzés:

Egyszerre csak az egyik PackageLicenseExpression, PackageLicenseFileés PackageLicenseUrl megadható.

Fájl csomagolása kiterjesztés nélkül

Bizonyos esetekben, például egy licencfájl csomagolásakor érdemes lehet bővítmény nélküli fájlt is belefoglalni. Előzmény okokból NuGet a > MSBuild bővítmény nélküli útvonalakat könyvtárakként kezeli.

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0</TargetFrameworks>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
  </PropertyGroup>

  <ItemGroup>
    <None Include="LICENSE" Pack="true" PackagePath=""/>
  </ItemGroup>  

Fájl bővítményminta nélkül.

IsTool

A MSBuild -t:pack -p:IsTool=true használatakor a Kimeneti szerelvények forgatókönyvben megadott összes kimeneti fájlt a tools mappába másolja a lib mappa helyett. Vegye figyelembe, hogy ez eltér attól, ami a DotNetCliTool fájlban a PackageType beállításával van megadva .csproj.

Fájl használatával történő csomagolás .nuspec

Bár javasoljuk, hogy az összes tulajdonságot, amely általában a fájlban található, inkább a projektfájlban tüntesse fel, választhatja azt is, hogy egy .nuspec fájl használatával csomagolja be a projektet. Még mindig vissza kell állítania a projektet, mielőtt becsomagolhat egy nuspec fájlt. (Egy SDK-stílusú projekt alapértelmezés szerint tartalmazza a csomagcélokat.)

A projektfájl célkeretrendszere irreleváns, és nem használják, amikor egy nuspec csomagolásra kerül. A következő három MSBuild tulajdonság releváns a .nuspec használatával történő csomagoláshoz.

  1. NuspecFile: a .nuspec csomagoláshoz használt fájl relatív vagy abszolút elérési útja.
  2. NuspecProperties: egy pontosvesszővel elválasztott key=value párok listája. MSBuild A parancssori elemzés működése miatt több tulajdonságot is meg kell adni az alábbiak szerint: -p:NuspecProperties="key1=value1;key2=value2".
  3. NuspecBasePath: Alap elérési út a .nuspec fájlhoz.

Ha dotnet.exe-t használ a projekt csomagolásához, használjon egy ilyen parancsot:

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Ha MSBuild-t használ a projekt csomagolásához, használjon egy ilyen parancsot:

msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Vegye figyelembe, hogy a nuspec dotnet.exe vagy az msbuild használatával történő csomagolás alapértelmezés szerint a projekt elkészítéséhez is vezet. Ezt elkerülheti, ha a --no-build tulajdonságot a dotnet.exe-nek átadja, ami egyenértékű azzal, hogy a projektfájlban beállítja a <NoBuild>true</NoBuild> és <IncludeBuildOutput>false</IncludeBuildOutput> értékeket.

Egy .csproj fájl, amely egy nuspec fájl csomagolására szolgál, például a következő lehet:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoBuild>true</NoBuild>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
    <NuspecProperties>add nuspec properties here</NuspecProperties>
    <NuspecBasePath>optional to provide</NuspecBasePath>
  </PropertyGroup>
</Project>

Speciális bővítménypontok a testreszabott csomag létrehozásához

A pack cél két bővítménypontot biztosít, amelyek a belső, célkeret-specifikus buildben futnak. A bővítménypontok támogatják a célkeret-specifikus tartalmakat és szerelvényeket egy csomagban:

  • TargetsForTfmSpecificBuildOutput Használat: fájlokhoz a lib mappán belül vagy a BuildOutputTargetFolder által megadott mappához.
  • TargetsForTfmSpecificContentInPackage cél: Használja a BuildOutputTargetFolder-n kívüli fájlokhoz.

TargetsForTfmSpecificBuildOutput

Írjon egy egyéni célértéket, és adja meg a $(TargetsForTfmSpecificBuildOutput) tulajdonság értékeként. Annak biztosítására, hogy a fájlok a BuildOutputTargetFolder (lib alapértelmezés szerint) helyesen kerüljenek, a célnak be kell írnia ezeket a fájlokat az ItemGroup BuildOutputInPackage csoportba, és be kell állítania a következő két metaadatértéket:

  • FinalOutputPath: A fájl abszolút elérési útja; ha nincs megadva, az identitás a forrásútvonal kiértékelésére szolgál.
  • TargetPath: (Nem kötelező) Állítsa be, ha a fájlnak lib\<TargetFramework> egy almappába kell kerülnie, például a saját kultúrának megfelelő mappákba tartozó műholdas szerelvények esetében. Alapértelmezés szerint a fájl neve.

Példa:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="GetMyPackageFiles">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
        <TargetPath>cs</TargetPath>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

TargetsForTfmSpecificContentInPackage

Írjon egy egyéni célértéket, és adja meg a $(TargetsForTfmSpecificContentInPackage) tulajdonság értékeként. A csomagba felvenni kívánt fájlok esetében a célnak be kell írnia ezeket a fájlokat az ItemGroupba TfmSpecificPackageFile , és be kell állítania a következő választható metaadatokat:

  • PackagePath: Elérési út, ahol a fájlnak kimenetnek kell lennie a csomagban. NuGet figyelmeztetést ad ki, ha egynél több fájl van hozzáadva ugyanahhoz a csomagútvonalhoz.
  • BuildAction: A fájlhoz rendelendő összeállítási művelet, amely csak akkor szükséges, ha a csomag elérési útja a contentFiles mappában található. Alapértelmezés szerint a "Nincs" értékre van kapcsolva.

Példa:

<PropertyGroup>
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>

<Target Name="CustomContentTarget">
  <ItemGroup>
    <TfmSpecificPackageFile Include="abc.txt">
      <PackagePath>mycontent/$(TargetFramework)</PackagePath>
    </TfmSpecificPackageFile>
    <TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
      <PackagePath>net46content</PackagePath>
    </TfmSpecificPackageFile>  
  </ItemGroup>
</Target>  

visszaállítási cél

MSBuild -t:restore (amelyet nuget restore és dotnet restore .NET Core projektekben használnak), visszaállítja a projektfájlban hivatkozott csomagokat a következő módon:

  1. Olvassa el az összes projekthivatkozást minden projektnél.
  2. A projekt tulajdonságainak elolvasása a köztes mappa és a cél-keretrendszer megkereséséhez
  3. Az MSBuild adatainak továbbítása a NuGet.Build.Tasks.dll fájlba
  4. Visszaállítás futtatása
  5. Csomagok letöltése
  6. Objektumfájlok, -célok és -kellékek írása

A restore cél a PackageReference formátumot használó projektek esetében működik. MSBuild 16.5+ Választható támogatás van a packages.config formátumhoz.

Megjegyzés:

A restore cél nem futtatható a build célmal együtt.

Tulajdonságok visszaállítása

A további visszaállítási beállítások a projektfájl tulajdonságaiból MSBuild származhatnak. Az értékek a parancssorból is beállíthatók a -p: kapcsolóval (lásd az alábbi példákat).

Ingatlan Description
RestoreSources A csomagforrások pontosvesszővel elválasztott listája.
RestorePackagesPath Felhasználói csomagok mappájának elérési útja.
RestoreDisableParallel A letöltések korlátozása egyenként.
RestoreConfigFile Az alkalmazandó Nuget.Config fájl elérési útja.
RestoreNoHttpCache Ha ez igaz, elkerüli az HTTP gyorsítótárazott csomagok használatát. Lásd : A globális csomagok és a gyorsítótármappák kezelése.
RestoreIgnoreFailedSources Ha igaz, figyelmen kívül hagyja a hibás vagy hiányzó csomagforrásokat.
RestoreFallbackFolders Tartalék mappák, amelyeket ugyanúgy használnak, mint a felhasználói csomagok mappája.
RestoreAdditionalProjectSources A visszaállítás során használandó további források.
RestoreAdditionalProjectFallbackFolders A visszaállítás során használandó további tartalék mappák.
RestoreAdditionalProjectFallbackFoldersExcludes Kizárja a visszaállítási mappákat, amelyeket a RestoreAdditionalProjectFallbackFolders megadott.
RestoreTaskAssemblyFile Az elérési út NuGet.Build.Tasks.dll.
RestoreGraphProjectInput A visszaállítandó projektek pontosvesszőkkel tagolt listája, amelynek abszolút elérési utakat kell tartalmaznia.
RestoreUseSkipNonexistentTargets Amikor a projekteket a MSBuild segítségével gyűjtik össze, az határozza meg, hogy az SkipNonexistentTargets optimalizálással történik-e az összegyűjtésük. Ha nincs beállítva, az alapértelmezett érték a következő.true Ennek az a következménye, hogy egy projekt céljait nem lehet importálni, a hibagyors működés következménye.
MSBuildProjectExtensionsPath Kimeneti mappa, alapértelmezés szerint a BaseIntermediateOutputPath mappa és a obj mappa.
RestoreForce A PackageReference-alapú projektekben minden függőséget feloldani kell, még akkor is, ha az utolsó visszaállítás sikeres volt. A jelölő megadása hasonló a project.assets.json fájl törléséhez. Ez nem kerüli meg az HTTP gyorsítótárat.
RestorePackagesWithLockFile A zárolási fájl használatát választja.
RestoreLockedMode A visszaállítás futtatása zárolt módban. Ez azt jelenti, hogy a visszaállítás nem fogja újraértékelni a függőségeket.
NuGetLockFilePath A zárolási fájl egyedi helye. Az alapértelmezett hely a projekt mellett található, és a neve .packages.lock.json
RestoreForceEvaluate Kényszeríti a visszaállítást a függőségek újraszámítására és a lock fájl figyelmeztetés nélküli frissítésére.
RestorePackagesConfig Egy választható kapcsoló, amely visszaállítja a projekteket a packages.config-fel. Csak MSBuild -t:restore támogatással.
RestoreRepositoryPath Csak packages.config. Meghatározza azt a csomagkönyvtárat, amelybe a csomagokat vissza kell állítani. SolutionDirectory akkor lesz használatban, ha nincs megadva.
RestoreUseStaticGraphEvaluation Egy opt-in kapcsoló, amely statikus gráfkiértékelést MSBuild használ a standard kiértékelés helyett. A statikus gráfok kiértékelése egy kísérleti funkció, amely jelentősen gyorsabb a nagy adattárak és megoldások esetében.
RestoreUseLegacyDependencyResolver Az örökölt függőségfeloldó használatának letiltása. NuGetA függőségfeloldó implementációja újra lett írva a 6.12-es kiadásban. Az előző algoritmus használatát ez a kapcsoló rákényszeríti.

A ExcludeRestorePackageImports tulajdonság egy belső tulajdonság, amelyet a NuGet használ. Semmilyen MSBuild fájlokat nem szabad módosítani vagy beállítani.

Példák

Parancssor:

msbuild -t:restore -p:RestoreConfigFile=<path>

Projektfájl:

<PropertyGroup>
    <RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>

Kimenetek visszaállítása

A Visszaállítás a következő fájlokat hozza létre a buildmappában obj :

File Description
project.assets.json Az összes csomaghivatkozás függőségi gráfját tartalmazza.
{projectName}.projectFileExtension.nuget.g.props Hivatkozások a MSBuild csomagokban található kellékekre
{projectName}.projectFileExtension.nuget.g.targets Hivatkozások a MSBuild csomagokban található célokra

Visszaállítás és építés egyetlen MSBuild paranccsal

Mivel a NuGet célokat és kellékeket tartalmazó MSBuild csomagok visszaállítására képes, a visszaállítási és buildértékelések különböző globális tulajdonságokkal futnak. Ez azt jelenti, hogy az alábbiak kiszámíthatatlan és gyakran helytelen viselkedéssel fognak rendelkezni.

msbuild -t:restore,build

Ehelyett az ajánlott megközelítés a következő:

msbuild -t:build -restore

Ugyanez a logika vonatkozik a többi hasonló célra is build.

PackageReference és packages.config projektek MSBuild visszaállítása

A MSBuild 16,5+-os verziójú packages.config szintén támogatottak msbuild -t:restore.

msbuild -t:restore -p:RestorePackagesConfig=true

Megjegyzés:

packages.config a visszaállítás csak a MSBuild 16.5+-vel érhető el, és nem a dotnet.exe-vel.

Visszaállítás statikus gráf kiértékelésével MSBuild

Megjegyzés:

A MSBuild 16.6+-os verzióval hozzáadtunk egy kísérleti funkciót a NuGet parancssorból származó statikus gráfok kiértékeléséhez, amely jelentősen javítja a nagy tárházak visszaállítási idejét.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

Másik lehetőségként engedélyezheti a tulajdonság beállításával a Directory.Build.Props fájlban.

<Project>
  <PropertyGroup>
    <RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
  </PropertyGroup>
</Project>

Megjegyzés:

A Visual Studio 2019.x és NuGet 5.x verziójában ez a funkció kísérleti és opt-innek minősül. A /Home#9803 elemet követveNuGet megtudhatja, hogy a funkció alapértelmezés szerint mikor lesz engedélyezve.

A statikus gráfok visszaállítása megváltoztatja a visszaállítás msbuild részét, a projekt olvasását és kiértékelését, de a visszaállítási algoritmust nem! A visszaállítási algoritmus minden NuGet eszköz (NuGet.exe, MSBuild.exe, dotnet.exe és Visual Studio) esetén ugyanaz.

Nagyon kevés esetben előfordulhat, hogy a statikus gráfok visszaállítása eltér az aktuális visszaállítástól, és bizonyos deklarált PackageReferences vagy ProjectReferences értékek hiányoznak.

A nyugalom megőrzése érdekében, a statikus gráf visszaállítására történő egyszeri ellenőrzés során fontolja meg a következők futtatását:

msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore

NuGet nem jelentheti a módosításokat. Ha eltérést tapasztal, jelentsen egy problémát a /HomeNuGet oldalon.

Egy könyvtár cseréje a visszaállítási gráfból

Ha egy visszaállítás rossz assemblyt hoz létre, kizárhatja a csomag alapértelmezett választását, és lecserélheti a saját választására. Elsőként a legfelső szinttel PackageReferencezárja ki az összes objektumot:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

Ezután adja hozzá saját hivatkozását a DLL megfelelő helyi példányához:

<Reference Include="Newtonsoft.Json.dll" />