Работа с рабочей областью

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

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

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

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

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

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

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

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

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

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

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

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

связи между различными элементами рабочей области, содержащей проекты и исходные файлы

Сводка

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