Мы столкнулись с проблемой, когда у нас есть несколько решений, использующих общие проекты, которые будут перестраивать проект, даже если он был только что построен.FooProject и BarProject имеют ссылки на сервисы (не уверены, что это важная информация).MobileProject и SecurityProject не имеют ссылок на сервисы.Проблема, с которой мы сталкиваемся, заключается в том, что если вы откроете TestA.sln, измените конфигурацию на Release файл build.force
, который появится в папке obj / release.
TestA.sln и TestB.sln имеют одинаковые 4 проекта - FooProject, BarProject, MobileProject и SecurityProject (для целей тестирования, очевидно)
Вот шаги, которые мы предпринимаем для воспроизведения проблемы:
- Открыть TestA.sln в VS 2017
- Перейти в конфигурацию выпуска
- Сборка
- Закрыть VS
- Подождитеминута или 2
- Открыть TestB.sln в VS2017
- Переключиться в конфигурацию Release (файл force.build появляется в FooProject \ bin \ x86 \ Release и BarProject \ bin \ x86 \ Release)
- Сборка Закрыть VS
- Открыть 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 проекта, довольно легко увидеть).