Bir paketteki MSBuild .props ve .targets
Daha geleneksel derlemelere ek olarak, NuGet paketleri bazen bu paketi kullanan projelere özel derleme hedefleri veya özellikler ekleyebilir.
Bu, projenin derleme klasörleri içinde veya biçiminde <package_id>.targets
( <package_id>.props
gibi Contoso.Utility.UsefulStuff.targets
) geçerli bir MSBuild dosyası eklenerek elde edilebilir.
Klasör oluşturma
NuGet geliştikçe, derleme .props
.targets
için çeşitli farklı klasörler eklenmiştir.
Klasör | NuGet Sürümü | Kullanma |
---|---|---|
derleme | 2.5+ | Bir projenin her çerçevesi için mantık oluşturma. |
buildMultiTargeting | 4.0+ | Birden çok çerçeveyi outer build hedefleyen projeler için oluşturma mantığı. Yalnızca PackageReference. |
buildTransitive | 5.0+ | Tüketen herhangi bir projeye geçişli olarak akan varlıklar için mantık oluşturun. Özellik sayfasına bakın. Yalnızca PackageReference. |
Çerçeveye özgü derleme klasörü
3 derleme klasörünün tümü, proje hedef çerçevesine göre en uygun dosyaya karar vermek için aynı deseni izler.
Kök derleme klasöründeki build/<package_id>.targets
dosyalar ve build/<package_id>.props
tüm hedef çerçeveler için uygun olarak kabul edilir.
Çerçeveye özgü dosyalar sağlamak için, önce bunları aşağıdaki gibi uygun alt klasörlere yerleştirin:
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
Paketiniz tarafından desteklenmeyen projelerde hatalı pozitif yüklemelerden kaçınmak için uygun olduğunda çerçeveye özgü derleme klasörlerini kullanmayı tercih edin.
Bir pakette veya ref
klasörlerinde lib
herhangi bir dosya yoksa ve yalnızca çerçeveye özgü derleme klasörü altındaki dosyalar varsa, bu paketin tüm projelerle uyumlu olarak kabul edileceğini unutmayın. Paket araçlarının güncel sürümleri, bu tür paketler oluşturulduğunda NU5127 uyarısını yükseltin.
Derleme dosyalarıyla paketleri kullanan projeler
PackageReference projeleri
.props
ve .targets
proje dosyasına eklenmez, ancak bunun yerine ve {projectName}.nuget.g.props
aracılığıyla {projectName}.nuget.g.targets
kullanılabilir hale getirilir. Geri yükleme çalıştırıldığında bu dosyalar otomatik olarak oluşturulur.
Bir proje birden fazla çerçeveyi hedeflediğinde, bu dosyalara yapılan içeri aktarma işlemleri hedef çerçeve adına göre koşullanır.
ÇOK çerçeveli hedefleme için MSBuild .props
ve .targets
dosyaları klasörüne \buildMultiTargeting
yerleştirilebilir.
İçeri aktarmalar oluşturulduğunda, MSBuild özelliğinin $(TargetFramework)
boş olduğu bir koşul ayarlanır.
packages.config projeleri
NuGet dosyaları olan \build
bir paket yüklediğinde, proje dosyasına ve .props
dosyalarına .targets
işaret eden MSBuild <Import>
öğeleri ekler. (.props
proje dosyasının en üstüne eklenir; .targets
en alta eklenir.) Her hedef çerçeve için ayrı bir koşullu MSBuild <Import>
öğesi eklenir.
MSBuild props ve hedefleri ile paket yazma
MSBuild'i .props
ve .targets
paketinize eklemek için aşağıdaki araçlardan herhangi birini kullanabilirsiniz.
MSBuild destek ve hedeflerinin içeriğine yönelik yönergeler
NuGet, paket yazarının ve .targets
hedef projelerin kendilerine göre değişiklik göstereceği için, yazma .props
yönteminizi sınırlamaz.
Paketlerin .props
ve .targets
içinde yapılmaması gereken, geri yüklemeyi etkileyen özellikleri ve öğeleri belirtmeme gibi birkaç şey vardır çünkü bunlar otomatik olarak dışlanır.
Eklenmemesi veya güncelleştirilmemesi gereken özelliklere bazı örnekler: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback vb.
Eklenmemesi veya güncelleştirilmemesi gereken bazı öğe örnekleri: PackageReference, PackageVersion, PackageDownload vb.