Ответ 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