Использование рабочей области

Слой Рабочие области является отправной точкой для анализа кода и рефакторинга в рамках целых решений. В этом слое API рабочей области помогает упорядочить всю информацию о проектах в решении в рамках одной объектной модели, предоставляя вам прямой доступ к объектным моделям слоя компилятора, например тексту исходного кода, деревьям синтаксиса, семантическим моделям и компиляциям, без необходимости анализировать файлы, настраивать параметры или управлять зависимостями между проектами.

Среды размещения, такие как интегрированная среда разработки, предоставляют рабочую область, соответствующую открытому решению. Эту модель можно использовать и вне интегрированной среды разработки, просто загрузив файл решения.

Рабочая область

Рабочая область является активным представлением вашего решения в виде коллекции проектов, каждый из которых содержит коллекцию документов. Рабочая область обычно привязывается к среде размещения, которая постоянно изменяется по мере того, как пользователь вводит или использует свойства.

Workspace предоставляет доступ к текущей модели решения. При возникновении изменения в среде размещения рабочая область выдает соответствующие события, после чего обновляется свойство Workspace.CurrentSolution. Например, когда пользовательские типы в текстовом редакторе соответствуют одному из исходных документов, рабочая область использует событие, чтобы сообщить всей модели об изменении решения и измененном документе. После этого вы можете отреагировать на такие изменения, проанализировав новую модель на корректность, выделив значимые области или внеся предложение по изменению кода.

Кроме того, вы можете создать автономные рабочие области, которые отключены от среды размещения или используются в приложении без такой среды.

Решения, проекты и документы

Хотя рабочая область может меняться при каждом нажатии клавиши, вы можете работать с моделью решения изолированно.

Решение представляет собой неизменяемую модель проектов и документов. Это означает, что модель можно использовать совместно без блокировки или дублирования. После получения экземпляра решения из свойства Workspace.CurrentSolution этот экземпляр больше не меняется. Однако, как и в случае с деревьями синтаксиса и компиляциями, вы можете изменять решения, создавая экземпляры на основе существующих решений и определенных изменений. Чтобы рабочая область отражала ваши изменения, нужно явным образом применить измененное решение обратно к ней.

Проект является частью общей неизменяемой модели решения. Он представляет все документы исходного кода, параметры синтаксического анализа и компиляции, а также ссылки на сборки и ссылки между проектами. Из проекта вы можете обратиться к соответствующей компиляции без необходимости определять зависимости проекта или анализировать исходные файлы.

Документ также является частью общей неизменяемой модели решения. Он представляет один исходный файл, из которого можно обратиться к тексту файла, дереву синтаксиса и семантической модели.

Следующая схема показывает, как рабочая область связана со средой размещения, средствами и способом внесения изменений.

the relationships between different elements of a workspace containing projects and source files

Итоги

Roslyn содержит набор API компиляторов и API рабочих областей, предоставляющий подробные сведения об исходном коде и обеспечивающий полную точность для языков C# и Visual Basic. Пакет SDK для .NET Compiler Platform значительно сокращает требования к созданию средств и приложений, ориентированных на код. Он предоставляет множество возможностей для инноваций в таких областях, как метапрограммирование, создание и преобразование кода, интерактивное использование языков C# и Visual Basic, а также их внедрение в доменные языки.