MsBuild .props i .targets w pakiecie
Oprócz bardziej tradycyjnych zestawów pakiety NuGet mogą czasami dodawać niestandardowe obiekty docelowe kompilacji lub właściwości do projektów korzystających z tego pakietu.
Można to osiągnąć, dodając prawidłowy plik MSBuild w formularzu <package_id>.targets
lub <package_id>.props
(na przykład Contoso.Utility.UsefulStuff.targets
) w folderach kompilacji projektu.
Foldery kompilacji
W miarę rozwoju narzędzia NuGet różne foldery kompilacji .props
i .targets
zostały dodane.
Folder | Wersja narzędzia NuGet | Używanie |
---|---|---|
build | 2.5+ | Tworzenie logiki dla każdej struktury projektu. |
buildMultiTargeting | 4.0+ | Logika kompilacji outer build dla projektów przeznaczonych dla wielu platform. Tylko funkcja PackageReference. |
buildTransitive | 5.0+ | Tworzenie logiki dla zasobów, które przepływają przechodnio do dowolnego projektu zużywanego. Zobacz stronę funkcji. Tylko funkcja PackageReference. |
Folder kompilacji specyficzny dla platformy
Wszystkie 3 foldery kompilacji są zgodne z tym samym wzorcem, aby decydować o najbardziej odpowiednim pliku na podstawie struktury docelowej projektu.
Pliki w głównym folderze build/<package_id>.targets
kompilacji i build/<package_id>.props
są uważane za odpowiednie dla wszystkich platform docelowych.
Aby udostępnić pliki specyficzne dla platformy, najpierw umieść je w odpowiednich podfolderach, takich jak:
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
Preferuj używanie folderów kompilacji specyficznych dla platformy zawsze, gdy jest to odpowiednie, aby uniknąć fałszywie dodatnich instalacji w projektach, które mogą nie być obsługiwane przez pakiet.
Należy pamiętać, że jeśli pakiet nie ma żadnych plików w lib
folderze lub ref
i tylko pliki w ramach określonego folderu kompilacji platformy, ten pakiet zostanie uznany za zgodny ze wszystkimi projektami. Aktualne wersje narzędzi pakietu zgłaszają ostrzeżenie NU5127 podczas tworzenia takich pakietów.
Projekty korzystające z pakietów z plikami kompilacji
Projekty PackageReference
.props
i .targets
nie są dodawane do pliku projektu, ale zamiast tego są udostępniane za pomocą poleceń {projectName}.nuget.g.targets
i {projectName}.nuget.g.props
. Te pliki są generowane automatycznie po uruchomieniu przywracania.
Gdy projekt jest przeznaczony dla więcej niż jednej platformy, importy do tych plików są warunkowe w nazwie platformy docelowej.
Program MSBuild .props
i .targets
pliki przeznaczone dla wielu platform docelowych można umieścić w folderze \buildMultiTargeting
.
Po wygenerowaniu importu ustawiono warunek, że właściwość $(TargetFramework)
MSBuild jest pusta.
packages.config projects (projekty packages.config)
Gdy program NuGet instaluje pakiet z plikami \build
, dodaje elementy MSBuild <Import>
w pliku projektu wskazującym pliki .targets
i .props
. (.props
jest dodawany w górnej części pliku projektu; .targets
jest dodawany u dołu). Dla każdej platformy docelowej jest dodawany oddzielny warunkowy element MSBuild <Import>
.
Tworzenie pakietów za pomocą rekwizytów i elementów docelowych programu MSBuild
Do uwzględnienia programu MSBuild .props
i .targets
pakietu można użyć dowolnego z poniższych narzędzi.
Wskazówki dotyczące zawartości rekwizytów i elementów docelowych programu MSBuild
Narzędzie NuGet nie ogranicza sposobu tworzenia .props
i .targets
ponieważ będzie się różnić w zależności od potrzeb autora pakietu i samych projektów docelowych.
Istnieje kilka rzeczy, które nie mogą być wykonywane w pakietach i .props
.targets
, takich jak nie określanie właściwości i elementów, które mają wpływ na przywracanie, ponieważ zostaną one automatycznie wykluczone.
Niektóre przykłady właściwości, których nie można dodać ani zaktualizować: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback itp.
Niektóre przykłady elementów, których nie można dodać ani zaktualizować: PackageReference, PackageVersion, PackageDownload itp.