Microsoft.Bcl.Build NuGet paketi ne yapar?


83

Bununla ilgili herhangi bir belge bulamıyorum - Microsoft.Bcl.Build Nuget sayfasındaki bağlantılar fazla yardım sağlamıyor:

Bu paket, belirli Microsoft paketlerine referans veren projelerin başarıyla oluşturulabilmesi için altyapı bileşenleri sağlar.

Bir referans eklemenizi söyleyen bir yapı uyarısı almadığınız sürece bu paketlere doğrudan başvurmayın.

Bakarak Microsoft.Bcl.Build.targetso bağlayıcı yönlendirmeleri ve paket başvuruları yönetir gibi dosyaya görünüyor. Görünüşe göre bu işlevlerden bazıları yalnızca Visual Studio'da çalışırken kullanılıyor.

Bu paketin ne işe yaradığı hakkında daha fazla bilgi veren var mı? Bu, inşa sunucu ortamımızda bir sorun , tamamen kaynak koddan derlenirken göz ardı edilebilir mi (örneğin, sunucu ortamı oluşturun)?

Yanıtlar:


26

Bakıldığında Microsoft.Bcl.Build.targets, bir dizi proje yapılandırma hedefi vardır, örneğin:

  • EnsureBindingRedirects - Bağlama yönlendirmeleri için hangi referansların etkinleştirildiğini belirleyin ve app.config'i bunlarla güncelleyin
  • BclBuildValidateNugetPackageReferences - Bu hedef, mevcut projede yüklü olan herhangi bir Nuget paketinin de mevcut projede bağımlılıklarının (geçişli bağımlılıklar) kurulu olduğunu doğrular.

Bu değerlendirmeye dayanarak, NuGet bağımlılıklarını eklerken / kaldırırken / güncellerken bu işlevselliğin yalnızca bir geliştirme ortamında gerekli olduğuna karar verdim; ve sorunlara neden olduğu CI ortamında göz ardı edilebileceğini.

Bu yüzden bağımlılığı * .csproj dosyalarımda tutmak istiyorum, ancak bir CI derlemesi çalıştırırken bunu göz ardı ediyorum. Bunu, bu bloğu içeren bir yapı ortamı hedefleri dosyasına (ör. Builder.targets) koşullu içe aktarma ekleyerek yaptım:

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
  <BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>

Bu, bir CI ortamındaki hedefleri göz ardı etme, ancak bunları bir geliştirme ortamında etkinleştirme gibi net etkiye sahiptir. Bunu bir haftadan fazla süredir çalıştırıyorum ve şu ana kadar sorun yok ...

Yine de, bu paket hakkında bunu yapmanın kötü bir fikir olduğunu gösteren daha iyi bilgiye sahip olup olmadığını bilmek isterim. Şimdiye kadar bunun iyi bir fikir olduğuna inanıyorum.

2018-02-01'i düzenleyin:

Yoksay parametresinin Microsoft.Bcl.Build.targetsmantığı atlamak için komut satırından da geçirilebileceğini unutmayın :

msbuild (targets, etc) /p:BclBuildImported=Ignore

Tam olarak anlamadım So I want to keep the dependency in my *.csproj files, but ignore it. I did that by adding a conditional import on a build environment targets file (eg builder.targets), detaylandırır mısınız?
JobaDiniz

Geliştirme sırasında / Visual Studio içinde kullanılabilmesi için proje referansını Microsoft.Bcl.Build'e tutmam gerekiyordu. Mantık, bağımlılık güncellemeleri sırasında çalışır. Ancak, bir yapı sunucusunda çalıştırma sorunları nedeniyle derleme sunucusu derlemeleri sırasında devre dışı bırakmak istedim.
crimbo

1
Bunu nasıl kontrol edeceğiniz konusunda daha net olmak için, <Hedef> ve <Import> öğelerine eklediklerimin bir örneğini burada bulabilirsiniz: <Target> için: Condition="$(BclBuildImported) != 'Ignore'"ve <Import> için:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Auri Rahimzadeh

Bunu ayrıca .nuget \ something.targets gerektiren eski kodumdan kalan aptalca bir şey olarak buldum
Auri Rahimzadeh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.