NuGet pakowanie i przywracanie jako MSBuild miejsca docelowe
NuGet 4.0+
W formacie NuGet PackageReference 4.0 lub nowszym można przechowywać wszystkie metadane manifestu bezpośrednio w pliku projektu, zamiast używać oddzielnego .nuspec
pliku.
Z MSBuild 15.1+ NuGet jest również obywatelem pierwszej klasy MSBuild z celami i restore
zgodnie z pack
poniższym opisem. Te obiekty docelowe umożliwiają pracę z NuGet innymi zadaniami lub obiektami MSBuild docelowymi. Aby uzyskać instrukcje dotyczące tworzenia NuGet pakietu przy użyciu programu MSBuild, zobacz Tworzenie NuGet pakietu przy użyciu polecenia MSBuild. (Dla NuGet W wersji 3.x i starszej używasz poleceń pakietu i przywracania za pośrednictwem interfejsu NuGet wiersza polecenia.
Kolejność kompilowania obiektów docelowych
Ponieważ pack
i restore
są obiektami MSBuild docelowymi, możesz uzyskać do nich dostęp, aby ulepszyć przepływ pracy. Załóżmy na przykład, że chcesz skopiować pakiet do udziału sieciowego po jego spakowaniu. Możesz to zrobić, dodając następujące polecenie w pliku projektu:
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy
SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
DestinationFolder="\\myshare\packageshare\"
/>
</Target>
Podobnie możesz napisać MSBuild zadanie, napisać własny element docelowy i korzystać z NuGet właściwości w zadaniu MSBuild .
Uwaga
$(OutputPath)
parametr jest względny i oczekuje, że uruchamiasz polecenie z poziomu katalogu głównego projektu.
element docelowy pakietu
W przypadku projektów platformy .NET, które używają formatu, przy użyciu PackageReference
polecenia msbuild -t:pack
pobiera dane wejściowe z pliku projektu do użycia podczas tworzenia NuGet pakietu.
W poniższej tabeli opisano MSBuild właściwości, które można dodać do pliku projektu w pierwszym <PropertyGroup>
węźle. Te zmiany można łatwo wprowadzić w programie Visual Studio 2017 lub nowszym, klikając projekt prawym przyciskiem myszy i wybierając polecenie Edytuj {project_name} w menu kontekstowym. Dla wygody tabela jest zorganizowana według równoważnej właściwości w .nuspec
pliku.
Uwaga
Owners
właściwości i Summary
z .nuspec
programu nie są obsługiwane za pomocą polecenia MSBuild.
Atrybut/nuspec wartość | MSBuild Własność | Wartość domyślna | Uwagi |
---|---|---|---|
Id |
PackageId |
$(AssemblyName) |
$(AssemblyName) z MSBuild |
Version |
PackageVersion |
Wersja | Jest to zgodne ze standardem semver, na przykład 1.0.0 , 1.0.0-beta lub 1.0.0-beta-00345 . Wartość domyślna to Version , jeśli nie jest ustawiona. |
VersionPrefix |
VersionPrefix |
empty | Zastępowanie ustawień PackageVersion VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | Zastępowanie ustawień PackageVersion VersionSuffix |
Authors |
Authors |
Nazwa użytkownika bieżącego użytkownika | Rozdzielana średnikami lista autorów pakietów zgodna z nazwami profilów w witrynie nuget.org. Są one wyświetlane w galerii w nugetwitrynie NuGet .org i są używane do odsyłania pakietów przez tych samych autorów. |
Owners |
Nie dotyczy | Nie ma w nuspec | |
Title |
Title |
$(PackageId) |
Przyjazny dla człowieka tytuł pakietu, zwykle używany w interfejsie użytkownika jest wyświetlany jako w witrynie nuget.org i Menedżer pakietów w programie Visual Studio. |
Description |
Description |
"Opis pakietu" | Długi opis zestawu. Jeśli PackageDescription nie zostanie określona, ta właściwość jest również używana jako opis pakietu. |
Copyright |
Copyright |
empty | Szczegóły praw autorskich dla pakietu. |
RequireLicenseAcceptance |
PackageRequireLicenseAcceptance |
false |
Wartość logiczna określająca, czy klient musi monitować użytkownika o zaakceptowanie licencji pakietu przed zainstalowaniem pakietu. |
license |
PackageLicenseExpression |
empty | Odpowiada .<license type="expression"> Zobacz Pakowanie wyrażenia licencji lub pliku licencji. |
license |
PackageLicenseFile |
empty | Ścieżka do pliku licencji w pakiecie, jeśli używasz licencji niestandardowej lub licencji, która nie ma przypisanego identyfikatora SPDX. Należy jawnie spakować plik licencji, do którego się odwołujesz. Odpowiada .<license type="file"> Zobacz Pakowanie wyrażenia licencji lub pliku licencji. |
LicenseUrl |
PackageLicenseUrl |
empty | PackageLicenseUrl jest przestarzały. Użyj polecenia PackageLicenseExpression lub PackageLicenseFile zamiast tego. |
ProjectUrl |
PackageProjectUrl |
empty | |
Icon |
PackageIcon |
empty | Ścieżka do obrazu w pakiecie do użycia jako ikona pakietu. Należy jawnie spakować plik obrazu ikony, do której się odwołujesz. Aby uzyskać więcej informacji, zobacz Pakowanie pliku obrazu ikony i icon metadanych. |
IconUrl |
PackageIconUrl |
empty | PackageIconUrl jest przestarzały na rzecz .PackageIcon Jednak w celu uzyskania najlepszego środowiska obniżania poziomu należy określić PackageIconUrl oprócz PackageIcon elementu . |
Readme |
PackageReadmeFile |
empty | Należy jawnie spakować przywołyany plik readme. |
Tags |
PackageTags |
empty | Rozdzielana średnikami lista tagów, która wyznacza pakiet. |
ReleaseNotes |
PackageReleaseNotes |
empty | Informacje o wersji pakietu. |
Repository/Url |
RepositoryUrl |
empty | Adres URL repozytorium używany do klonowania lub pobierania kodu źródłowego. Przykład: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
Repository/Type |
RepositoryType |
empty | Typ repozytorium. Przykłady: git (ustawienie domyślne), tfs . |
Repository/Branch |
RepositoryBranch |
empty | Informacje o gałęzi repozytorium opcjonalne. RepositoryUrl należy również określić, aby ta właściwość została uwzględniona. Przykład: master (NuGet 4.7.0+). |
Repository/Commit |
RepositoryCommit |
empty | Opcjonalne zatwierdzenie repozytorium lub zestaw zmian wskazujące źródło, względem którego utworzono pakiet. RepositoryUrl należy również określić, aby ta właściwość została uwzględniona. Przykład: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
PackageType |
<PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> |
Wskazuje zamierzone użycie pakietu. Typy pakietów używają tego samego formatu co identyfikatory pakietów i są rozdzielane przez ; element . Typy pakietów mogą być wersjonowane przez dołączenie ciągu , i Version . Zobacz Ustawianie NuGet typu pakietu (NuGet 3.5.0+). |
|
Summary |
Nieobsługiwane |
pakuj docelowe dane wejściowe
Właściwości | opis |
---|---|
IsPackable |
Wartość logiczna określająca, czy projekt można spakować. Domyślna wartość to true . |
SuppressDependenciesWhenPacking |
Ustaw wartość na , aby true pominąć zależności pakietów z wygenerowanego NuGet pakietu. |
PackageVersion |
Określa wersję, którą będzie miał wynikowy pakiet. Akceptuje wszystkie formy NuGet ciągu wersji. Wartość domyślna to , $(Version) czyli właściwość Version w projekcie. |
PackageId |
Określa nazwę wynikowego pakietu. Jeśli nie zostanie określony, pack operacja będzie domyślnie używać AssemblyName nazwy katalogu lub jako nazwy pakietu. |
PackageDescription |
Długi opis pakietu dla wyświetlania interfejsu użytkownika. |
Authors |
Rozdzielana średnikami lista autorów pakietów zgodna z nazwami profilów w witrynie nuget.org. Są one wyświetlane w galerii w nugetwitrynie NuGet .org i są używane do odsyłania pakietów przez tych samych autorów. |
Description |
Długi opis zestawu. Jeśli PackageDescription nie zostanie określona, ta właściwość jest również używana jako opis pakietu. |
Copyright |
Szczegóły praw autorskich dla pakietu. |
PackageRequireLicenseAcceptance |
Wartość logiczna określająca, czy klient musi monitować użytkownika o zaakceptowanie licencji pakietu przed zainstalowaniem pakietu. Wartość domyślna to false . |
DevelopmentDependency |
Wartość logiczna określająca, czy pakiet jest oznaczony jako zależność tylko do programowania, która uniemożliwia dołączanie pakietu jako zależność w innych pakietach. W przypadku PackageReference elementu (NuGet 4.8 lub nowszego) ta flaga oznacza również, że zasoby czasu kompilacji są wykluczone z kompilacji. Aby uzyskać więcej informacji, zobacz DevelopmentDependency support for PackageReference (Obsługa współzależności dla elementu PackageReference). |
PackageLicenseExpression |
Identyfikator lub wyrażenie licencji SPDX, na przykład Apache-2.0 . Aby uzyskać więcej informacji, zobacz Pakowanie wyrażenia licencji lub pliku licencji. |
PackageLicenseFile |
Ścieżka do pliku licencji w pakiecie, jeśli używasz licencji niestandardowej lub licencji, która nie ma przypisanego identyfikatora SPDX. |
PackageLicenseUrl |
PackageLicenseUrl jest przestarzały. Użyj polecenia PackageLicenseExpression lub PackageLicenseFile zamiast tego. |
PackageProjectUrl |
|
PackageIcon |
Określa ścieżkę ikony pakietu względem katalogu głównego pakietu. Aby uzyskać więcej informacji, zobacz Pakowanie pliku obrazu ikony. |
PackageReleaseNotes |
Informacje o wersji pakietu. |
PackageReadmeFile |
Plik Readme dla pakietu. |
PackageTags |
Rozdzielana średnikami lista tagów, która wyznacza pakiet. |
PackageOutputPath |
Określa ścieżkę wyjściową, w której spakowany pakiet zostanie porzucony. Wartość domyślna to $(OutputPath) . |
IncludeSymbols |
Ta wartość logiczna wskazuje, czy pakiet powinien utworzyć dodatkowy pakiet symboli podczas pakowania projektu. Format pakietu symboli jest kontrolowany przez SymbolPackageFormat właściwość . Aby uzyskać więcej informacji, zobacz IncludeSymbols. |
IncludeSource |
Ta wartość logiczna wskazuje, czy proces pakietu powinien utworzyć pakiet źródłowy. Pakiet źródłowy zawiera kod źródłowy biblioteki, a także pliki PDB. Pliki źródłowe są umieszczane src/ProjectName w katalogu w wynikowym pliku pakietu. Aby uzyskać więcej informacji, zobacz IncludeSource. |
PackageType |
|
IsTool |
Określa, czy wszystkie pliki wyjściowe są kopiowane do folderu tools zamiast folderu lib . Aby uzyskać więcej informacji, zobacz IsTool. |
RepositoryUrl |
Adres URL repozytorium używany do klonowania lub pobierania kodu źródłowego. Przykład: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
RepositoryType |
Typ repozytorium. Przykłady: git (ustawienie domyślne), tfs . |
RepositoryBranch |
Informacje o gałęzi repozytorium opcjonalne. RepositoryUrl należy również określić, aby ta właściwość została uwzględniona. Przykład: master (NuGet 4.7.0+). |
RepositoryCommit |
Opcjonalne zatwierdzenie repozytorium lub zestaw zmian wskazujące źródło, względem którego utworzono pakiet. RepositoryUrl należy również określić, aby ta właściwość została uwzględniona. Przykład: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
SymbolPackageFormat |
Określa format pakietu symboli. Jeśli "symbols.nupkg" zostanie utworzony starszy pakiet symboli z rozszerzeniem .symbols.nupkg zawierającym pliki PDB, BIBLIOTEKi DLL i inne pliki wyjściowe. Jeśli "snupkg", zostanie utworzony pakiet symboli snupkg zawierający przenośne pliki PDB. Wartość domyślna to "symbols.nupkg". |
NoPackageAnalysis |
Określa, że pack nie należy uruchamiać analizy pakietów po utworzeniu pakietu. |
MinClientVersion |
Określa minimalną wersję NuGet klienta, który może zainstalować ten pakiet, wymuszany przez nuget.exe i program Visual Studio Menedżer pakietów. |
IncludeBuildOutput |
Ta wartość logiczna określa, czy zestawy wyjściowe kompilacji powinny być pakowane do pliku nupkg , czy nie. |
IncludeContentInPack |
Ta wartość logiczna określa, czy wszystkie elementy, które mają typ Content , są automatycznie uwzględniane w wynikowym pakiecie. Wartość domyślna to true . |
BuildOutputTargetFolder |
Określa folder, w którym mają być umieszczane zestawy wyjściowe. Zestawy wyjściowe (i inne pliki wyjściowe) są kopiowane do odpowiednich folderów struktury. Aby uzyskać więcej informacji, zobacz Zestawy wyjściowe. |
ContentTargetFolders |
Określa domyślną lokalizację miejsca, w którym mają być używane wszystkie pliki zawartości, jeśli PackagePath nie są dla nich określone. Wartość domyślna to "content; contentFiles". Aby uzyskać więcej informacji, zobacz Dołączanie zawartości w pakiecie. |
NuspecFile |
Względna lub bezwzględna ścieżka do pliku używanego .nuspec do pakowania. Jeśli zostanie określony, jest używany wyłącznie do tworzenia informacji o opakowaniu, a żadne informacje w projektach nie są używane. Aby uzyskać więcej informacji, zobacz Pakowanie przy użyciu elementu .nuspec. |
NuspecBasePath |
Ścieżka podstawowa .nuspec pliku. Aby uzyskać więcej informacji, zobacz Pakowanie przy użyciu elementu .nuspec. |
NuspecProperties |
Rozdzielona średnikami lista par key=value. Aby uzyskać więcej informacji, zobacz Pakowanie przy użyciu elementu .nuspec. |
scenariusze pakietów
Pomijanie zależności
Aby pominąć zależności pakietów z wygenerowanego NuGet pakietu, ustaw wartość SuppressDependenciesWhenPacking
, na true
którą będzie zezwalać pomijanie wszystkich zależności z wygenerowanego pliku nupkg.
PackageIconUrl
PackageIconUrl
jest przestarzały na rzecz PackageIcon
właściwości . NuGet Począwszy od wersji 5.3 i Visual Studio 2019 w wersji 16.3, zgłasza ostrzeżenie NU5048, pack
jeśli metadane pakietu określają PackageIconUrl
tylko wartość .
PackageIcon
Napiwek
Aby zachować zgodność z poprzednimi wersjami z klientami i źródłami, które jeszcze nie obsługują PackageIcon
programu , określ wartości i PackageIcon
PackageIconUrl
. Program Visual Studio obsługuje PackageIcon
pakiety pochodzące ze źródła opartego na folderach.
Pakowanie pliku obrazu ikony
Podczas pakowania pliku obrazu ikony użyj PackageIcon
właściwości , aby określić ścieżkę pliku ikony względem katalogu głównego pakietu. Ponadto upewnij się, że plik jest uwzględniony w pakiecie. Rozmiar pliku obrazu jest ograniczony do 1 MB. Obsługiwane formaty plików obejmują pliki JPEG i PNG. Zalecamy rozdzielczość obrazu 128x128.
Na przykład:
<PropertyGroup>
...
<PackageIcon>icon.png</PackageIcon>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="images\icon.png" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Przykład ikona pakietu.
Aby zapoznać się z nuspec odpowiednikiem, zapoznaj nuspec się z odwołaniem do ikony.
PackageReadmeFile
Obsługiwane w NuGet wersji 5.10.0 (wersja zapoznawcza 2.NET / SDK 5.0.300 i nowsze)
Podczas pakowania pliku readme należy użyć PackageReadmeFile
właściwości , aby określić ścieżkę pakietu względem katalogu głównego pakietu. Oprócz tego należy się upewnić, że plik znajduje się w pakiecie. Obsługiwane formaty plików obejmują tylko język Markdown (md).
Na przykład:
<PropertyGroup>
...
<PackageReadmeFile>readme.md</PackageReadmeFile>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="docs\readme.md" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Aby zapoznać się z odpowiednikiem nuspec , zapoznaj nuspec się z odwołaniem do pliku readme.
Zestawy wyjściowe
nuget pack
kopiuje pliki wyjściowe z rozszerzeniami .exe
, , .xml
.dll
, .winmd
, .json
, i .pri
. Skopiowane pliki wyjściowe zależą od tego, co MSBuild zapewnia element docelowy BuiltOutputProjectGroup
.
Istnieją dwie MSBuild właściwości, których można użyć w pliku projektu lub wierszu polecenia, aby kontrolować miejsce, w którym przechodzą zestawy wyjściowe:
IncludeBuildOutput
: wartość logiczna określająca, czy zestawy wyjściowe kompilacji powinny być uwzględnione w pakiecie.BuildOutputTargetFolder
: określa folder, w którym powinny zostać umieszczone zestawy wyjściowe. Zestawy wyjściowe (i inne pliki wyjściowe) są kopiowane do odpowiednich folderów struktury.
Odwołania do pakietu
Zobacz Odwołania do pakietów w plikach projektu.
Odwołania projektu do projektu
Odwołania projektu do projektu są domyślnie traktowane jako NuGet odwołania do pakietów. Na przykład:
<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>
Do dokumentacji projektu można również dodać następujące metadane:
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
Dołączanie zawartości do pakietu
Aby dołączyć zawartość, dodaj dodatkowe metadane do istniejącego <Content>
elementu. Domyślnie wszystkie elementy typu "Zawartość" są dołączane do pakietu, chyba że zastąpisz wpisy podobne do następujących:
<Content Include="..\win7-x64\libuv.txt">
<Pack>false</Pack>
</Content>
Domyślnie wszystko jest dodawane do katalogu głównego content
folderu i contentFiles\any\<target_framework>
w pakiecie i zachowuje względną strukturę folderów, chyba że określisz ścieżkę pakietu:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles\</PackagePath>
</Content>
Jeśli chcesz skopiować całą zawartość tylko do określonych folderów głównych (zamiast content
i contentFiles
obu), możesz użyć MSBuild właściwości ContentTargetFolders
, która domyślnie ma wartość "content; contentFiles", ale można ustawić na inne nazwy folderów. Należy pamiętać, że po prostu określenie wartości "contentFiles" w ContentTargetFolders
pliku umieszcza pliki w obszarze contentFiles\any\<target_framework>
lub contentFiles\<language>\<target_framework>
na podstawie elementu buildAction
.
PackagePath
może być rozdzielonym średnikami zestawem ścieżek docelowych. Określenie pustej ścieżki pakietu spowoduje dodanie pliku do katalogu głównego pakietu. Na przykład następujące polecenie dodaje libuv.txt
element do content\myfiles
elementu , content\samples
i katalog główny pakietu:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
Istnieje również MSBuild właściwość , która domyślnie ma wartość $(IncludeContentInPack)
true
. Jeśli ta wartość jest ustawiona false
na dowolny projekt, zawartość z tego projektu nie jest uwzględniona w pakiecie nuget .
Inne metadane specyficzne dla pakietu, które można ustawić dla dowolnego z powyższych elementów, obejmują <PackageCopyToOutput>
zestawy <PackageFlatten>
CopyToOutput
i Flatten
wartości we contentFiles
wpisie w danych wyjściowych nuspec.
Uwaga
Oprócz elementów <Pack>
zawartości można również ustawić metadane i <PackagePath>
na plikach za pomocą akcji kompilacji Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource lub None.
Aby pakiet dołączał nazwę pliku do ścieżki pakietu podczas używania wzorców symboli globbingowych, ścieżka pakietu musi kończyć się znakiem separatora folderu, w przeciwnym razie ścieżka pakietu jest traktowana jako pełna ścieżka wraz z nazwą pliku.
IncludeSymbols
W przypadku korzystania z programu MSBuild -t:pack -p:IncludeSymbols=true
odpowiednie pliki są kopiowane wraz z innymi plikami wyjściowymi (.dll
, .exe
, , .winmd
.xml
, , ). .pri
.json
.pdb
Należy pamiętać, że ustawienie IncludeSymbols=true
tworzy zwykły pakiet i pakiet symboli.
IncludeSource
Jest to takie samo jak IncludeSymbols
, z tą różnicą, że kopiuje pliki źródłowe wraz z plikami .pdb
. Wszystkie pliki typu Compile
są kopiowane w celu src\<ProjectName>\
zachowania struktury folderów ścieżki względnej w wynikowym pakiecie. Dzieje się tak samo również w przypadku plików źródłowych, ProjectReference
które mają TreatAsPackageReference
ustawioną wartość false
.
Jeśli plik typu Kompiluj, znajduje się poza folderem projektu, to właśnie został dodany do src\<ProjectName>\
elementu .
Pakowanie wyrażenia licencji lub pliku licencji
W przypadku korzystania z wyrażenia licencji użyj PackageLicenseExpression
właściwości . Aby zapoznać się z przykładem, zobacz przykładowe wyrażenie licencji.
<PropertyGroup>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
Aby dowiedzieć się więcej na temat wyrażeń licencji i licencji akceptowanych przez NuGetfirmę .org, zobacz metadane licencji.
Podczas pakowania pliku licencji użyj PackageLicenseFile
właściwości , aby określić ścieżkę pakietu względem katalogu głównego pakietu. Ponadto upewnij się, że plik jest uwzględniony w pakiecie. Na przykład:
<PropertyGroup>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>
Aby zapoznać się z przykładem, zobacz Przykładowy plik licencji.
Uwaga
Jednocześnie można określić tylko jedną z PackageLicenseExpression
wartości , PackageLicenseFile
i PackageLicenseUrl
.
Pakowanie pliku bez rozszerzenia
W niektórych scenariuszach, takich jak podczas pakowania pliku licencji, możesz chcieć dołączyć plik bez rozszerzenia. Ze względów NuGet historycznych i MSBuild traktuj ścieżki bez rozszerzenia jako katalogi.
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="LICENSE" Pack="true" PackagePath=""/>
</ItemGroup>
Plik bez przykładu rozszerzenia.
IsTool
W przypadku korzystania z programu MSBuild -t:pack -p:IsTool=true
wszystkie pliki wyjściowe określone w scenariuszu Zestawy wyjściowe są kopiowane do tools
folderu zamiast lib
folderu. Należy pamiętać, że różni się to od parametru określonego DotNetCliTool
przez ustawienie w PackageType
pliku ..csproj
Pakowanie przy użyciu .nuspec
pliku
Mimo że zaleca się dołączenie wszystkich właściwości , które zazwyczaj znajdują się w .nuspec
pliku w pliku projektu, można zamiast tego użyć .nuspec
pliku do spakowania projektu. W przypadku projektu w stylu innego niż ZESTAW SDK, który używa PackageReference
programu , należy go zaimportować NuGet.Build.Tasks.Pack.targets
, aby można było wykonać zadanie pakietu. Aby można było spakować nuspec plik, nadal trzeba przywrócić projekt. (Projekt w stylu zestawu SDK domyślnie zawiera elementy docelowe pakietu).
Struktura docelowa pliku projektu jest nieistotna i nie jest używana podczas pakowania pliku nuspec. Następujące trzy MSBuild właściwości mają zastosowanie do pakowania przy użyciu elementu .nuspec
:
NuspecFile
: względna lub bezwzględna ścieżka do pliku używanego.nuspec
do pakowania.NuspecProperties
: rozdzielana średnikami lista par key=value. Ze względu na sposób MSBuild działania analizowania wiersza polecenia należy określić wiele właściwości w następujący sposób:-p:NuspecProperties="key1=value1;key2=value2"
.NuspecBasePath
: ścieżka podstawowa.nuspec
pliku.
Jeśli używasz dotnet.exe
polecenia , aby spakować projekt, użyj polecenia podobnego do następującego:
dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Jeśli używasz MSBuild polecenia , aby spakować projekt, użyj polecenia podobnego do następującego:
msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Należy pamiętać, że pakowanie nuspec obiektu przy użyciu dotnet.exe lub msbuild domyślnie prowadzi do kompilowania projektu. Można tego uniknąć, przekazując --no-build
właściwość do dotnet.exe, która jest odpowiednikiem ustawienia w pliku projektu, wraz z ustawieniem <NoBuild>true</NoBuild>
<IncludeBuildOutput>false</IncludeBuildOutput>
w pliku projektu.
Przykładem pliku csproj do spakowania nuspec pliku jest:
<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>
Zaawansowane punkty rozszerzenia do tworzenia dostosowanego pakietu
Obiekt docelowy pack
udostępnia dwa punkty rozszerzenia, które działają w wewnętrznej, docelowej strukturze określonej kompilacji. Punkty rozszerzenia obsługują m.in. zawartość specyficzną dla platformy docelowej i zestawy do pakietu:
TargetsForTfmSpecificBuildOutput
target: użyj polecenia dla plików wewnątrzlib
folderu lub folderu określonego przy użyciu poleceniaBuildOutputTargetFolder
.TargetsForTfmSpecificContentInPackage
target: użyj polecenia dla plików spoza programuBuildOutputTargetFolder
.
TargetsForTfmSpecificBuildOutput
Napisz obiekt docelowy niestandardowy i określ go jako wartość $(TargetsForTfmSpecificBuildOutput)
właściwości. W przypadku wszystkich plików, które muszą przejść do biblioteki BuildOutputTargetFolder
(domyślnie lib), obiekt docelowy powinien zapisać te pliki w grupie ItemGroup BuildOutputInPackage
i ustawić następujące dwie wartości metadanych:
FinalOutputPath
: ścieżka bezwzględna pliku; Jeśli nie zostanie podana, tożsamość zostanie użyta do oceny ścieżki źródłowej.TargetPath
: (Opcjonalnie) Ustaw, kiedy plik musi przejść do podfolderu w programielib\<TargetFramework>
, na przykład zestawy satelitarne, które przechodzą pod odpowiednie foldery kultury. Wartość domyślna to nazwa pliku.
Przykład:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
<TargetPath>cs</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
TargetsForTfmSpecificContentInPackage
Napisz obiekt docelowy niestandardowy i określ go jako wartość $(TargetsForTfmSpecificContentInPackage)
właściwości. W przypadku wszystkich plików do uwzględnienia w pakiecie element docelowy powinien zapisać te pliki w grupie ItemGroup TfmSpecificPackageFile
i ustawić następujące opcjonalne metadane:
PackagePath
: ścieżka, w której plik powinien być wyjściowy w pakiecie. NuGet wyświetla ostrzeżenie, jeśli do tej samej ścieżki pakietu zostanie dodany więcej niż jeden plik.BuildAction
: Akcja kompilacji do przypisania do pliku jest wymagana tylko wtedy, gdy ścieżka pakietu znajduje się w folderzecontentFiles
. Wartość domyślna to "Brak".
Przykład:
<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>
element docelowy przywracania
MSBuild -t:restore
(które nuget restore
i dotnet restore
używane z projektami platformy .NET Core) przywraca pakiety, do których odwołuje się plik projektu w następujący sposób:
- Odczytywanie wszystkich odwołań do projektu
- Odczytywanie właściwości projektu w celu znalezienia pośredniego folderu i platform docelowych
- Przekaż MSBuild dane do NuGet. Build.Tasks.dll
- Uruchamianie przywracania
- Pobieranie pakietów
- Zapisywanie plików, elementów docelowych i rekwizytów zasobów
Element docelowy restore
działa dla projektów przy użyciu formatu PackageReference.
MSBuild 16.5+
ma również możliwość zgody na packages.config
format.
Uwaga
Element docelowy restore
nie powinien być uruchamiany w połączeniu z obiektem build
docelowym.
Przywracanie właściwości
Dodatkowe ustawienia przywracania mogą pochodzić z MSBuild właściwości w pliku projektu. Wartości można również ustawić z poziomu wiersza polecenia przy użyciu przełącznika -p:
(zobacz przykłady poniżej).
Właściwości | opis |
---|---|
RestoreSources |
Rozdzielana średnikami lista źródeł pakietów. |
RestorePackagesPath |
Ścieżka folderu pakietów użytkowników. |
RestoreDisableParallel |
Ogranicz pobieranie do jednego naraz. |
RestoreConfigFile |
Ścieżka do Nuget.Config pliku do zastosowania. |
RestoreNoHttpCache |
Jeśli wartość true, unika używania pakietów z pamięci podręcznej HTTP. Zobacz Zarządzanie pakietami globalnymi i folderami pamięci podręcznej. |
RestoreIgnoreFailedSources |
Jeśli wartość true, ignoruje błędy lub brakujące źródła pakietów. |
RestoreFallbackFolders |
Foldery rezerwowe używane w taki sam sposób, w jaki jest używany folder pakietów użytkownika. |
RestoreAdditionalProjectSources |
Dodatkowe źródła do użycia podczas przywracania. |
RestoreAdditionalProjectFallbackFolders |
Dodatkowe foldery rezerwowe do użycia podczas przywracania. |
RestoreAdditionalProjectFallbackFoldersExcludes |
Wyklucza foldery rezerwowe określone w RestoreAdditionalProjectFallbackFolders |
RestoreTaskAssemblyFile |
Ścieżka do NuGet.Build.Tasks.dll . |
RestoreGraphProjectInput |
Rozdzielana średnikami lista projektów do przywrócenia, która powinna zawierać ścieżki bezwzględne. |
RestoreUseSkipNonexistentTargets |
Gdy projekty są zbierane za pośrednictwem MSBuild niego, określają, czy są zbierane przy użyciu SkipNonexistentTargets optymalizacji. Jeśli nie zostanie ustawiona, wartość domyślna to true . Konsekwencją jest szybkie zachowanie, gdy nie można zaimportować elementów docelowych projektu. |
MSBuildProjectExtensionsPath |
Folder wyjściowy, wartość domyślna BaseIntermediateOutputPath obj i folder. |
RestoreForce |
W projektach opartych na elemencie PackageReference wymusza rozwiązanie wszystkich zależności, nawet jeśli ostatnie przywracanie zakończyło się pomyślnie. Określenie tej flagi jest podobne do usuwania project.assets.json pliku. Nie pomija to pamięci podręcznej http. |
RestorePackagesWithLockFile |
Wyraża zgodę na użycie pliku blokady. |
RestoreLockedMode |
Uruchom przywracanie w trybie zablokowanym. Oznacza to, że przywracanie nie będzie ponownie oceniane zależności. |
NuGetLockFilePath |
Lokalizacja niestandardowa pliku blokady. Domyślna lokalizacja znajduje się obok projektu i nosi nazwę packages.lock.json . |
RestoreForceEvaluate |
Wymusza przywrócenie, aby ponownie skompilować zależności i zaktualizować plik blokady bez żadnego ostrzeżenia. |
RestorePackagesConfig |
Przełącznik z wyrażeniem zgody, który przywraca projekty przy użyciu pliku packages.config. Obsługa MSBuild -t:restore tylko. |
RestoreRepositoryPath |
tylko packages.config. Określa katalog pakietów, do którego mają zostać przywrócone pakiety. SolutionDirectory będzie używany, jeśli nie zostanie określony. |
RestoreUseStaticGraphEvaluation |
Przełącznik umożliwiający korzystanie z oceny wykresu MSBuild statycznego zamiast standardowej oceny. Ocena wykresu statycznego to funkcja eksperymentalna, która jest znacznie szybsza w przypadku dużych repozytoriów i rozwiązań. |
RestoreUseLegacyDependencyResolver |
Rezygnacja z używania starszego narzędzia do rozpoznawania zależności. NuGetImplementacja rozpoznawania zależności została przepisana w wersji 6.12. Ten przełącznik wymusza zastosowanie poprzedniego algorytmu. |
Właściwość ExcludeRestorePackageImports
jest właściwością wewnętrzną używaną przez NuGetelement .
Nie należy go modyfikować ani ustawiać w żadnych MSBuild plikach.
Przykłady
Wiersz polecenia:
msbuild -t:restore -p:RestoreConfigFile=<path>
Plik projektu:
<PropertyGroup>
<RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>
Przywracanie danych wyjściowych
Przywracanie tworzy następujące pliki w folderze kompilacji obj
:
Plik | opis |
---|---|
project.assets.json |
Zawiera wykres zależności wszystkich odwołań do pakietu. |
{projectName}.projectFileExtension.nuget.g.props |
Odwołania do MSBuild props zawartych w pakietach |
{projectName}.projectFileExtension.nuget.g.targets |
Odwołania do MSBuild obiektów docelowych zawartych w pakietach |
Przywracanie i kompilowanie za pomocą jednego MSBuild polecenia
Ze względu na fakt, że NuGet można przywrócić pakiety, które obniżają MSBuild cele i rekwizyty, przywracanie i oceny kompilacji są uruchamiane z różnymi właściwościami globalnymi. Oznacza to, że następujące zachowanie będzie nieprzewidywalne i często niepoprawne.
msbuild -t:restore,build
Zamiast tego zalecane jest następujące podejście:
msbuild -t:build -restore
Ta sama logika ma zastosowanie do innych obiektów docelowych podobnych do build
.
Przywracanie projektów PackageReference i packages.config za pomocą polecenia MSBuild
W wersji MSBuild 16.5 lub nowszej pliki packages.config są również obsługiwane dla programu msbuild -t:restore
.
msbuild -t:restore -p:RestorePackagesConfig=true
Uwaga
packages.config
Przywracanie jest dostępne tylko w programie , a nie w przypadku MSBuild 16.5+
dotnet.exe
Przywracanie przy użyciu MSBuild oceny wykresu statycznego
Uwaga
W wersji MSBuild 16.6 lub nowszej NuGet dodano funkcję eksperymentalną do używania statycznej oceny grafu z wiersza polecenia, która znacznie poprawia czas przywracania dla dużych repozytoriów.
msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true
Alternatywnie można ją włączyć, ustawiając właściwość w pliku Directory.Build.Props.
<Project>
<PropertyGroup>
<RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
</PropertyGroup>
</Project>
Uwaga
Od wersji Visual Studio 2019.x i NuGet 5.x ta funkcja jest uznawana za eksperymentalną i opt-in. Aby uzyskać szczegółowe informacje na temat tego, kiedy ta funkcja zostanie domyślnie włączona, postępuj zgodnie z instrukcjami NuGet/Home#9803 .
Przywracanie wykresu statycznego zmienia msbuild część przywracania, odczyt i ocenę projektu, ale nie algorytm przywracania! Algorytm przywracania jest taki sam we wszystkich NuGet narzędziach (NuGet.exe, MSBuild.exe, dotnet.exe i Visual Studio).
W bardzo niewielu scenariuszach przywracanie statycznego grafu może zachowywać się inaczej niż w przypadku bieżącego przywracania, a niektóre zadeklarowane elementy PackageReferences lub ProjectReferences mogą brakować.
Aby złagodzić swój umysł, podczas jednorazowego sprawdzania, podczas migracji do przywracania statycznego grafu należy rozważyć uruchomienie:
msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore
NuGetnie powinien zgłaszać żadnych zmian. Jeśli widzisz rozbieżność, zgłoś problem w NuGet/Home.
Zastępowanie jednej biblioteki z grafu przywracania
Jeśli przywracanie przynosi niewłaściwy zestaw, można wykluczyć ten domyślny wybór pakietów i zastąpić go własnym wyborem. Najpierw przy użyciu najwyższego poziomu PackageReference
wyklucz wszystkie zasoby:
<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
<ExcludeAssets>All</ExcludeAssets>
</PackageReference>
Następnie dodaj własne odwołanie do odpowiedniej lokalnej kopii biblioteki DLL:
<Reference Include="Newtonsoft.Json.dll" />