次の方法で共有


ワークスペースの使用

ワークスペース レイヤーは、ソリューション全体に対してコード分析とリファクタリングを行うための開始点です。 このレイヤー内では、Workspace API を使用すると、ソリューション内のプロジェクトに関するすべての情報を 1 つのオブジェクト モデルに編成できます。これにより、ファイルの解析、オプションの構成、プロジェクト間の依存関係の管理を必要とせずに、ソース テキスト、構文ツリー、セマンティック モデル、コンパイルなどのコンパイラ レイヤー オブジェクト モデルに直接アクセスできます。

IDE などのホスト環境には、開いているソリューションに対応するワークスペースが用意されています。 ソリューション ファイルを読み込むだけで、IDE の外部でこのモデルを使用することもできます。

ワークスペース

ワークスペースは、ソリューションをプロジェクトのコレクションとしてアクティブに表現したものです。それぞれにドキュメントのコレクションがあります。 ワークスペースは、通常、ユーザーがプロパティを入力または操作するにつれて絶えず変化するホスト環境に関連付けられます。

Workspaceは、ソリューションの現在のモデルへのアクセスを提供します。 ホスト環境で変更が発生すると、ワークスペースは対応するイベントを発生させ、 Workspace.CurrentSolution プロパティが更新されます。 たとえば、ユーザーがいずれかのソース ドキュメントに対応するテキスト エディターを入力すると、ワークスペースはイベントを使用して、ソリューションの全体的なモデルが変更され、どのドキュメントが変更されたかを通知します。 その後、新しいモデルの正確性を分析したり、重要な領域を強調表示したり、コード変更の提案を行ったりすることで、これらの変更に対応できます。

ホスト環境から切断されるか、ホスト環境がないアプリケーションで使用されるスタンドアロン ワークスペースを作成することもできます。

ソリューション、プロジェクト、ドキュメント

キーが押されるたびにワークスペースが変更される場合がありますが、ソリューションのモデルを単独で操作できます。

ソリューションは、プロジェクトとドキュメントの不変モデルです。 つまり、モデルはロックや重複なしで共有できます。 Workspace.CurrentSolution プロパティからソリューション インスタンスを取得した後、そのインスタンスは変更されません。 ただし、構文ツリーやコンパイルと同様に、既存のソリューションと特定の変更に基づいて新しいインスタンスを構築することで、ソリューションを変更できます。 変更を反映するようにワークスペースを取得するには、変更されたソリューションをワークスペースに明示的に適用する必要があります。

プロジェクトは、変更できないソリューション モデル全体の一部です。 これは、すべてのソース コード ドキュメント、解析とコンパイルのオプション、およびアセンブリとプロジェクト間の参照の両方を表します。 プロジェクトから、プロジェクトの依存関係を特定したり、ソース ファイルを解析したりしなくても、対応するコンパイルにアクセスできます。

ドキュメントは、変更できないソリューション モデル全体の一部でもあります。 ドキュメントは、ファイルのテキスト、構文ツリー、およびセマンティック モデルにアクセスできる単一のソース ファイルを表します。

次の図は、ワークスペースとホスト環境の関係、ツール、および編集の方法を示しています。

プロジェクトとソース ファイルを含むワークスペースのさまざまな要素間のリレーションシップ

概要

Roslyn は、ソース コードに関する豊富な情報を提供し、C# および Visual Basic 言語に完全に忠実なコンパイラ API とワークスペース API のセットを公開します。 .NET Compiler Platform SDK は、コードに重点を置いたツールとアプリケーションを作成するためのエントリへの障壁を大幅に削減します。 メタプログラミング、コードの生成と変換、C# 言語と Visual Basic 言語の対話型使用、ドメイン固有言語での C# と Visual Basic の埋め込みなど、多くのイノベーションの機会が生まれます。