Trabalhar com um espaço de trabalho
A camada Workspaces é o ponto de partida para fazer análise de código e refatoração em soluções inteiras. Dentro dessa camada, a API de espaço de trabalho 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 de 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 um 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.
Área de trabalho
Um espaço de trabalho é uma representação ativa da sua solução como uma coleção de projetos, cada um com uma coleção de documentos. Um espaço de trabalho normalmente está vinculado a um ambiente de host que está em constante mudança à 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 espaço de trabalho dispara os eventos correspondentes e a Workspace.CurrentSolution propriedade é atualizada. Por exemplo, quando o usuário digita em um editor de texto correspondente a um dos documentos de origem, o espaço de trabalho 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 quanto à correção, destacando áreas de importância ou fazendo uma sugestão para uma alteração de código.
Você também pode criar espaços de trabalho autônomos que são desconectados do ambiente de host ou usados em um aplicativo que não tem ambiente de host.
Soluções, projetos e documentos
Embora um espaço de trabalho possa mudar sempre que uma tecla é pressionada, você pode trabalhar com o modelo da solução isoladamente.
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 de solução da Workspace.CurrentSolution propriedade, essa instância nunca será alterada. No entanto, como acontece 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 alterada de volta ao espaço de trabalho.
Um projeto faz parte do modelo geral de solução imutável. Ele representa todos os documentos de código-fonte, opções de análise e compilação, e referências de assembly e projeto a projeto. A partir de um projeto, você pode acessar a compilação correspondente sem precisar determinar as dependências do projeto ou analisar quaisquer arquivos de origem.
Um documento também faz parte do modelo geral de solução imutável. Um documento representa um único arquivo de origem a partir 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 espaço de trabalho se relaciona com o ambiente do host, as ferramentas e como as edições são feitas.
Resumo
Roslyn expõe um conjunto de APIs de compilador e APIs de espaços de trabalho que fornece informações ricas sobre seu código-fonte e que tem total fidelidade com as linguagens C# e Visual Basic. O SDK da plataforma de compilador .NET reduz drasticamente a barreira de entrada para a criação de ferramentas e aplicativos focados em código. Ele cria muitas oportunidades de inovação em áreas como metaprogramação, geração e transformação de código, uso interativo das linguagens C# e Visual Basic e incorporação de C# e Visual Basic em linguagens específicas de domínio.