Что такое файл build.force и почему он появляется при изменении конфигурации сборки? - PullRequest
0 голосов
/ 18 октября 2018

Мы столкнулись с проблемой, когда у нас есть несколько решений, использующих общие проекты, которые будут перестраивать проект, даже если он был только что построен.FooProject и BarProject имеют ссылки на сервисы (не уверены, что это важная информация).MobileProject и SecurityProject не имеют ссылок на сервисы.Проблема, с которой мы сталкиваемся, заключается в том, что если вы откроете TestA.sln, измените конфигурацию на Release файл build.force, который появится в папке obj / release.

TestA.sln и TestB.sln имеют одинаковые 4 проекта - FooProject, BarProject, MobileProject и SecurityProject (для целей тестирования, очевидно)

Вот шаги, которые мы предпринимаем для воспроизведения проблемы:

  1. Открыть TestA.sln в VS 2017
  2. Перейти в конфигурацию выпуска
  3. Сборка
  4. Закрыть VS
  5. Подождитеминута или 2
  6. Открыть TestB.sln в VS2017
  7. Переключиться в конфигурацию Release (файл force.build появляется в FooProject \ bin \ x86 \ Release и BarProject \ bin \ x86 \ Release)
  8. Сборка Закрыть VS
  9. Открыть FooProject \ bin \ x86 \ Release.Обратите внимание, как FooProject.dll и BarProject.dll были перекомпилированы при сборке TestB.sln

Эти шаги воспроизведения недопустимы в VS2015.Эта проблема возникает только в VS2017.

Если вы удалите файл build.force после переключения на выпуск, но перед сборкой, проект не будет перестроен.Если вы оставите его с включенным выводом Диагностической сборки, вы увидите сообщение типа

Проект 'FooProject' не обновлен.Последняя сборка была с несохраненными файлами.

Насколько я могу судить, файл build.force - это способ форсировать сборку, создав файл, который не был включен в последнюю сборку.Почему это происходит только в VS2017?Почему он предполагает, что его нужно собрать вообще?

Дополнительные сведения:

У меня есть обходной путь к описанным выше шагам воспроизведения.Если я открою TestA.sln -> Release -> Build.Затем откройте TestB.sln -> закрыть VS 2017 -> Откройте TestB.sln -> Release -> Build.Теперь решение будет правильно не строить любые проекты.

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

...