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

.propsve .targets proje dosyasına eklenmez, ancak bunun yerine ve {projectName}.nuget.g.propsaracı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 .targetsiç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.