web-dev-qa-db-ja.com

RoslynはMsBuildとどのように関連していますか?

私は疑問に思います:RoslynはMsBuildとどの程度正確に関連していますか?

私の理解は

  1. Roslynはコンパイルエンジンです
  2. MsBuildは、主にプロジェクトの設定方法の仕様のセットです。つまり、基本的には.csproj、.slnファイルなどの定義スキーマです。

また、MsBuildにはmsbuild.exeも同梱されています。これにより、間違っている場合は修正され、実際にプロジェクトをコンパイルできます。しかし、msbuild.exeがプロジェクトをコンパイルできるとすると、これはRoslynとどのように結びつきますか?

MSBuild 15の場合、msbuild.exeはRoslynを使用してコンパイルしますか?それらは完全に分離していますか?私は何か誤解していますか?

さらに、より具体的に:プログラムで単純な.csprojファイルを作成し、RoslynのMSBuildWorkspaceを使用してこれらを処理/設定し、最後にコンパイルすることを想定しています。アプリケーションのエンドユーザーは、Microsoftのビルドツールをマシンにインストールする必要がありますか?または、RoslynがローカルのMSBuildインストールとは無関係にこれらを読み取ってコンパイルできるため、これは必要ありませんか?

16
Bogey

MSbuildはVisual Studioのビルドシステムです。 C#コンパイラを呼び出してC#プロジェクトをコンパイルします。 RoslynはC#コンパイラー(およびVBコンパイラー)なので、msbuildはRoslynを使用します。

ただし、Roslynには、コンパイラー以外にも多くのものが含まれています。また、IDE機能(補完リスト、色付け、コード修正など))を提供するVSプラグインも含まれています。

さらに、Roslynはソースコードを分析するためのAPIでもあり、独自のアプリから使用できます。この最後のシナリオには、MSBuildWorkspaceと呼ばれるAPIがあり、これを使用してプロジェクトまたはソリューションを分析用に開くことができます。このワークスペースは、MSBuildを使用して、プロジェクトとソリューションのすべての部分を把握します。したがって、Roslynのこの部分ではMSBuildを使用します。

16
Matt Warren