Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Если посмотреть на Microsoft.Bcl.Build.targets, у него есть множество целей конфигурации проекта, например:

  • EnsureBindingRedirects - определите, какие ссылки 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

Ответ 2

Это в основном способ для более старых пакетов, предназначенных для старых .Net, создавать и компилировать без проблем на новых .Nets

Если вы зайдете на http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx, вы увидите два объявления, ссылающихся на http://blogs.msdn.com/b/dotnet/archive/2013/11/13/pcl-and-net-nuget-library-are-now-enabled-for-xamarin.aspx и http://blogs.msdn.com/b/dotnet/archive/2013/08/12/improved-package- restore.aspx, который должен это объяснить.