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.
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
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>
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>
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.
-
NuspecFile: a.nuspeccsomagoláshoz használt fájl relatív vagy abszolút elérési útja. -
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". -
NuspecBasePath: Alap elérési út a.nuspecfá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:
-
TargetsForTfmSpecificBuildOutputHasználat: fájlokhoz alibmappán belül vagy aBuildOutputTargetFolderáltal megadott mappához. -
TargetsForTfmSpecificContentInPackagecél: Használja aBuildOutputTargetFolder-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ájlnaklib\<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 acontentFilesmappá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:
- Olvassa el az összes projekthivatkozást minden projektnél.
- A projekt tulajdonságainak elolvasása a köztes mappa és a cél-keretrendszer megkereséséhez
- Az MSBuild adatainak továbbítása a NuGet.Build.Tasks.dll fájlba
- Visszaállítás futtatása
- Csomagok letöltése
- 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" />