Що робить пакет Microsoft.Bcl.Build NuGet?


83

Я не можу знайти жодної документації щодо цього - посилання зі сторінки Microsoft.Bcl.Build Nuget не дуже допомагають:

Цей пакет надає компоненти інфраструктури побудови, щоб проекти, що посилаються на певні пакети Microsoft, могли успішно будувати.

Не посилайтесь безпосередньо на ці пакети, якщо не отримаєте попередження про збірку, яке вказує вам додати посилання.

З огляду на Microsoft.Bcl.Build.targetsфайл, схоже, він управляє переспрямуванням прив'язки та посиланнями на пакунки. Схоже, частина цієї функціональності використовується лише під час роботи у Visual Studio.

Хтось може надати більше інформації про те, що робить цей пакет? Це біль у нашому середовищі побудови сервера , чи можна його ігнорувати, будуючи повністю з вихідного коду (наприклад, середовище побудови сервера)?

Відповіді:


26

Якщо дивитись Microsoft.Bcl.Build.targets, він має купу цілей конфігурації проекту, наприклад:

  • EnsureBindingRedirects - Визначте, які посилання вибрані для прив’язки переспрямувань, та оновіть app.config з ними
  • BclBuildValidateNugetPackageReferences - Ця мета перевіряє, що будь-які пакунки Nuget, встановлені в поточному проекті, також мають свої залежності (транзитивні залежності), встановлені в поточному проекті.

Отже, грунтуючись на цій оцінці, я вирішив, що ця функціональність потрібна лише у середовищі розробника під час додавання / видалення / оновлення залежностей NuGet; і що його можна ігнорувати в середовищі ІС, де це спричиняє проблеми.

Тому я хочу зберегти залежність у своїх файлах * .csproj, але ігнорувати її під час запуску збірки CI. Я зробив це, додавши умовний імпорт до файлу цілей середовища збірки (наприклад, builder.targets), який включає цей блок:

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

Це має наслідком ігнорування цілей у середовищі ІТ, але їх активація в середовищі розробки. У мене це працює більше тижня, і досі проблем немає ...

Я все одно хотів би знати, чи хтось має кращу інформацію про цей пакет, яка вказує на те, що робити це погана ідея. Поки що я вважаю, що це гарна ідея.

Редагувати 01.02.2018:

Зверніть увагу, що параметр ігнорування також може бути переданий у командному рядку, щоб пропустити Microsoft.Bcl.Build.targetsлогіку:

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

Я не зовсім зрозумів 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), чи можете ви пояснити?
JobaDiniz

Мені потрібно було зберегти посилання на проект Microsoft.Bcl.Build, щоб його можна було використовувати під час розробки / у Visual Studio. Логіка працює під час оновлення залежностей. Але я хотів вимкнути його під час збірки сервера збірки через проблеми з його запуском на сервері збірки.
crimbo

1
Щоб бути більш зрозумілим щодо того, як це перевірити, ось приклад того, що я додав до елементів <Target> та <Import>: Для <Target>: Condition="$(BclBuildImported) != 'Ignore'"та для <Import>:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Аурі Рахімзаде,

Я також виявив, що це дурна річ, що залишилася від мого застарілого коду, що вимагає .nuget \ something.targets
Аурі Рахімзаде

15

В основному це спосіб для старих пакетів, націлених на старіші .Net, створювати та компілювати без проблем на нових .Nets

Якщо ви перейдете на http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx, ви побачите два оголошення, що посилаються на https://devblogs.microsoft.com/dotnet/pcl-and-net-nuget- libraries-are-now-enabled-for-xamarin / та https://devblogs.microsoft.com/dotnet/improved-package-restore/, які повинні це пояснити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.