Подтвердить что ты не робот

Изменение исходного кода компиляции с использованием Roslyn

Возможно ли изменить исходный код перед компиляцией с использованием Roslyn в задаче MSBuild на CI-сервере? Мне удалось сделать то, что я хочу в VS, но мне интересно, возможно ли это за пределами VS. В настоящее время я смотрю API-интерфейсы Workspace и API-интерфейсы компилятора, и они, похоже, являются правильным инструментом для достижения этого, но я все еще не уверен, что это вообще возможно? В частности, я обеспокоен возвратом изменений, которые я сделал для MSBuild, чтобы он продолжал свою работу.

4b9b3361

Ответ 1

Это определенно сценарий, о котором мы думаем. Сегодня есть несколько проблем, которые делают это немного сложнее:

  • Вы не можете использовать API-интерфейсы Workspace для загрузки проекта/решения, поскольку вы уже находитесь внутри msbuild.
  • Чтобы использовать обычные API-интерфейсы компилятора, вам нужно самостоятельно построить компиляцию, которая может быть кучей работы.

В будущем мы хотели бы предоставить "Создать рабочее пространство из строки командной строки csc/vbc", что упростит это.

Взгляните на Взаимодействие с самим компилятором (csc.exe или vbc.exe) и Проблема с использованием Roslyn в задании сборки MS для некоторого предыдущего обсуждения этого вопроса.

Ответ 3

Я лично не смог проверить это (так что если вы это сделаете, обработайте этот "ответ" как комментарий), но прочитайте материал о Roslyn, особенно this в блоге, похоже, что это должно быть возможно (найдите абзац "Переписать".

По-видимому, вы можете построить дерево синтаксиса из источника (не слишком удивительно для компилятора, я думаю), а затем изменить это с помощью API-интерфейсов и, наконец, записать его обратно в строку/файл или что-то еще.

Также смотрите MSDN о синтаксических деревьях Roslyn концептуально, и это прохождение о "Трансформации синтаксиса".