Я использую Roslyn для некоторого генерации кода в одном из моих проектов C#. В настоящее время Roslyn возьмет весь проект, скомпилирует его с нуля, а затем выплюнет код, который я хочу. Это требует полной перекомпиляции, что немного медленнее. Когда Visual Studio компилирует проект, он не делает это с нуля каждый раз, он делает что-то умное и только перекомпилирует части, которые были изменены. Есть ли способ сделать это с Рослином?Как я могу избежать полной перекомпиляции при компиляции проекта C# с Roslyn?
ответ
Visual Studio (в следующей версии) использует Roslyn для компиляции кода (в IL). Для одного проекта, который не является инкрементным и никогда не был.
Я знал, что Roslyn был использован предстоящим VS. Я не знал, что VS не выполняет инкрементную компиляцию. Теперь мне любопытно, почему «чистые» повторные сборки занимают больше времени, чем регулярные сборки в моем опыте. Наверное, потому, что я работаю с большим количеством объектов изображения, которые нужно переписать в выходной каталог. – TheEzEzz
Когда MSBuild выполняет пересоединение, мы попытаемся избежать перестройки _projects_, если мы увидим, что результат сборки обновлен, с помощью обычной метки времени проверяет la Makefile. Но как только файл был изменен, мы перестраиваем весь проект, и все его нисходящие иждивенцы. –
Возможно, я ошибаюсь, поскольку я не уверен в Roslyn, но вы можете разделить код Roslyn на другое решение и иметь отдельное решение для своего собственного кода.
После этого вы можете просто создать решение, которое будет меняться все время.
"Incremental build" - это термин, который вы ищете. –
C# никогда не поддерживал инкрементные сборки. – SLaks
Вы пропустили какую-то ключевую информацию. Visual Studio не очень умна, но полагается на механизм MSBuild, чтобы посмотреть, какие проекты уже обновлены. Эта часть тоже не в Рослине. –