ОК, я нашел, по крайней мере, причину проблемы и несколько неудовлетворительный обходной путь!!
Я начал с добавления нового проекта модульного тестирования и добавления к нему ссылок на отдельные проекты из моего основного решения. Я обнаружил, что мой проект данных (бизнес-сущностей) страдает от проблемы, которую я описываю, и поскольку все мои другие сборки каким-то образом зависят от моего проекта данных, тот факт, что одна перекомпилирует, вызывает все остальные.
Почему этот ВСЕГДА перекомпилируется? Это как-то связано с Entity Framework. Создайте пустой проект и добавьте в него пустую модель EF — она ВСЕГДА будет перекомпилироваться, даже если вы ее не меняли. Затем это приводит к перекомпиляции любых зависимостей, предположительно из-за того, что метаданные сборки данных изменились.
Обходной путь, который я нашел, заключается в том, чтобы вместо добавления ссылки на проект добавить прямую ссылку на сборку в сборку данных. Недостатком является то, что вы не можете сделать, например. Перейти к определению в VS2008, чтобы перейти к типу напрямую, но, учитывая, что мы редко делаем это с этой конкретной сборкой, это не является серьезной проблемой.
Делая это, я сократил время сборки только для запуска одного модульного теста с ~ 20 секунд до ~ 7 секунд — что имеет огромное значение, когда вы пишете десятки модульных тестов каждый день!
Если у кого-нибудь есть какие-либо идеи относительно того, почему модели EF делают это, мне было бы очень интересно услышать...
person
Isaac Abraham
schedule
13.11.2009