Compartilhar via


Trabalhar com um workspace

A camada workspaces é o ponto de partida para fazer análise de código e refatoração em soluções inteiras. Nessa camada, a API do Workspace ajuda você a organizar todas as informações sobre os projetos em uma solução em um único modelo de objeto, oferecendo acesso direto a modelos de objeto de camada do compilador, como texto de origem, árvores de sintaxe, modelos semânticos e compilações sem a necessidade de analisar arquivos, configurar opções ou gerenciar dependências entre projetos.

Ambientes de host, como uma IDE, fornecem um espaço de trabalho para você, correspondente à solução aberta. Também é possível usar esse modelo fora de um IDE simplesmente carregando um arquivo de solução.

Espaço de trabalho

Um workspace é uma representação ativa da sua solução como uma coleção de projetos, cada um com uma coleção de documentos. Um workspace normalmente está vinculado a um ambiente anfitrião que está mudando constantemente à medida que um usuário digita ou manipula propriedades.

O Workspace fornece acesso ao modelo atual da solução. Quando ocorre uma alteração no ambiente de host, o workspace aciona eventos correspondentes e a propriedade Workspace.CurrentSolution é atualizada. Por exemplo, quando o usuário digita em um editor de texto correspondente a um dos documentos de origem, o workspace usa um evento para sinalizar que o modelo geral da solução foi alterado e qual documento foi modificado. Em seguida, você pode reagir a essas alterações analisando o novo modelo para verificar a correção, destacando áreas significativas ou fazendo uma sugestão para uma modificação de código.

Você também pode criar workspaces independentes desconectados do ambiente de hospedagem ou usados em um aplicativo que não tem ambiente de hospedagem.

Soluções, projetos e documentos

Embora um ambiente de trabalho possa ser alterado sempre que uma tecla é pressionada, você pode trabalhar com o modelo da solução completamente isolado.

Uma solução é um modelo imutável dos projetos e documentos. Isso significa que o modelo pode ser compartilhado sem bloqueio ou duplicação. Depois de obter uma instância da solução da propriedade Workspace.CurrentSolution, essa instância nunca será alterada. No entanto, como com árvores de sintaxe e compilações, você pode modificar soluções construindo novas instâncias com base em soluções existentes e alterações específicas. Para que o espaço de trabalho reflita suas alterações, você deve aplicar explicitamente a solução modificada de volta ao espaço de trabalho.

Um projeto faz parte do modelo de solução imutável geral. Ele representa todos os documentos do código-fonte, opções de análise e compilação e referências de assembly e projeto a projeto. Em um projeto, você pode acessar a compilação correspondente sem precisar determinar as dependências do projeto ou analisar os arquivos de origem.

Um documento também faz parte do modelo de solução imutável geral. Um documento representa um único arquivo de origem do qual você pode acessar o texto do arquivo, a árvore de sintaxe e o modelo semântico.

O diagrama a seguir é uma representação de como o Workspace se relaciona com o ambiente do host, as ferramentas e como as edições são feitas.

as relações entre diferentes elementos de um workspace que contém projetos e arquivos de origem

Resumo

Roslyn expõe um conjunto de APIs do compilador e APIs de Workspaces que fornece informações avançadas sobre seu código-fonte e que tem total fidelidade com as linguagens C# e Visual Basic. O SDK do .NET Compiler Platform reduz drasticamente a barreira à entrada para a criação de ferramentas e aplicativos focados em código. Ele cria muitas oportunidades de inovação em áreas como meta-programação, geração e transformação de código, uso interativo das linguagens C# e Visual Basic e inserção de C# e Visual Basic em linguagens específicas do domínio.