Что делает пакет NuGet Microsoft.Bcl.Build?

83

Я не могу найти никакой документации по этому поводу - ссылки на странице Microsoft.Bcl.Build Nuget не очень помогают:

Этот пакет предоставляет компоненты инфраструктуры сборки, чтобы проекты, ссылающиеся на определенные пакеты Microsoft, могли успешно строиться.

Не ссылайтесь на эти пакеты напрямую, если вы не получили предупреждение сборки, в котором вам предлагается добавить ссылку.

Глядя на Microsoft.Bcl.Build.targetsфайл, кажется, что он управляет перенаправлением привязки и ссылками на пакеты. Похоже, что некоторые из этих функций используются только при работе в Visual Studio.

Может ли кто-нибудь предоставить дополнительную информацию о том, что делает этот пакет? Это проблема в среде нашего сервера сборки , можно ли ее игнорировать при сборке полностью из исходного кода (например, в среде сервера сборки)?

кримбо
источник

Ответы:

26

На первый взгляд, у Microsoft.Bcl.Build.targetsнего есть несколько целей конфигурации проекта, например:

  • EnsureBindingRedirects - Определите, какие ссылки выбраны для перенаправления привязки, и обновите с их помощью app.config
  • BclBuildValidateNugetPackageReferences - Эта цель проверяет, что все пакеты Nuget, установленные в текущем проекте, также имеют свои зависимости (транзитивные зависимости), установленные в текущем проекте.

Итак, основываясь на этой оценке, я решил, что эта функциональность необходима только в среде разработки при добавлении / удалении / обновлении зависимостей NuGet; и что его можно игнорировать в среде CI, где он вызывает проблемы.

Поэтому я хочу сохранить зависимость в моих файлах * .csproj, но игнорировать ее при запуске сборки CI. Я сделал это, добавив условный импорт в файл целей среды сборки (например, builder.targets), который включает этот блок:

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

В итоге это приводит к игнорированию целей в среде CI, но их активации в среде разработки. У меня это работает уже больше недели, и пока никаких проблем ...

Я все еще хотел бы знать, есть ли у кого-нибудь более подробная информация об этом пакете, которая указывает на то, что это плохая идея. Пока я считаю, что это хорошая идея.

Изменить 2018-02-01:

Обратите внимание, что параметр ignore также можно передать в командной строке, чтобы пропустить 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 01
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- библиотеки-are-now-enabled-for-xamarin / и https://devblogs.microsoft.com/dotnet/improved-package-restore/, которые должны это объяснить.

Мэтью Верстрете
источник