ロズリンを選ぶ理由
以前は、コンパイラはブラックボックスのように機能していました。プログラムのソースコードを入力に送信し、出力でアセンブリを取得します。 コンパイラーが形成するすべての知識と情報は破棄され、誰も使用できなくなります。
Somaがブログで書いているように、Visual Studio言語チームの一部はRoslynと呼ばれるプロジェクトに取り組んでいます。 その主な目標は、C#およびVBコンパイラを書き直し、マネージコードで言語サービスを作成することです。 クリーンで最新の管理可能なコードを使用して、当社のチームはより生産的になり、より速く革新し、より多くの機会をより速く、より良い品質で提供できるようになります。
さらに、C#およびVBコンパイラをすべての内部情報とともに開き、コード分析を利用できるようにします。 パブリックAPIを提供し、C#およびVB言語サービスで拡張ポイントを提供します。
これにより、VisualStudio拡張機能の新たな可能性が開かれます。強力なリファクタリングツールと言語分析ユーティリティを作成し、パーサー、セマンティックエンジン、コード、およびスクリプトジェネレーターをアプリケーションで使用できるようにします。
2011年10月CTPをダウンロード
CTPおよびサポート資料は、 http : //msdn.com/roslynからダウンロードできます。
初期のビルド前の主な目標は、APIの設計に関するフィードバックを収集し、インタラクティブなC#ウィンドウ(REPL、Read-Eval-Print-Loopとも呼ばれる)を導入することです。
この最初のCTPはプレビュー専用であり、通常のアプリケーションの開発には使用しないでください。
CTPはVisual Studio 2010 SP1にインストールされます。 Visual Studio 2010 SP1 SDKも必要です。
最初のステップ
インストールが成功した後、作業を開始する最適な場所は、[スタート]メニュー-> Microsoft Codename Roslyn CTP->はじめにです。
はじめに、 「Roslyn Project Overview」ドキュメントには、提供されているAPIの概要、つまりプログラムで構文とセマンティクスを使用する方法が記載されています。 Roslyn APIのさまざまな側面に関する深い洞察を提供するために、いくつかのガイドが含まれています。
CTPには、Visual Studio拡張機能、APIコンパイラ、リファクタリングツールなどのサンプルが付属しています。 ほとんどの例は、C#およびVisual Basic用です。 入門ページから例のソースコードを開くことができます。
また、[新しいプロジェクト]ダイアログボックスで利用可能ないくつかの新しいプロジェクトテンプレートを追加しました。


これらのテンプレートは、Roslynを使用してVisual Studioの新しい拡張機能の作成を開始するのに役立ちます。
参照アセンブリ

RoslynアセンブリもGACにインストールされます。 (クライアントプロファイルではなく)フルプロファイルに切り替えると、(IDEサポートを含む)Serviesアセンブリにリンクすることもできます。
C#インタラクティブウィンドウ

[表示]-> [他のウィンドウ]-> [C#インタラクティブウィンドウ]でC#インタラクティブウィンドウを起動できます。 対話型ウィンドウは、新しいC#言語サービスで機能します。 Roslynのアーキテクチャは、IntelliSenseやリファクタリングなどのIDE機能が同じエディターとインタラクティブウィンドウで機能することを保証するのに十分な柔軟性を備えています。
現在、対話型ウィンドウはC#でのみ使用可能です。 近い将来、VBの対話型ウィンドウを作成する努力をしています。
C#スクリプトファイル(.csx)のサポート
CTPは、スクリプト化されたC#ファイルの概念を導入します。 ファイル->新規ファイル(またはメモ帳などのテキストエディター)で.csxファイルを作成できます。


%ProgramFiles(x86)%\ Microsoft Codename Roslyn CTP \ Binaries \ rcsi.exeにインストールされている新しいrcsi.exeを使用してスクリプトを実行できます。 rcsi.exeをパスに追加して、rcsi scriptfilename> .csxを出力できます。
また、スクリプトファイルからコードの一部をコピーし、(コンテキストメニューまたはホットキーを使用して)インタラクティブウィンドウに送信することもできます。
スクリプトファイルエディタは、新しい言語サービスでも作成されます。 したがって、.csxスクリプトは、Roslynコンパイラーで既に実装されている言語の一部のみをサポートすることに留意することが重要です。 詳細については、チュートリアルの「スクリプトの概要」セクションを参照してください。
クイックRoslyn APIの例
これは、Roslyn APIを使用して小さなプログラムをコンパイルおよび実行する例です。
Roslyn.Compilers を使用し ます 。
Roslyn.Compilers.CSharp を使用し ます 。
...
var text = @ "class Calc {public static object Eval(){return 42;}}" ;
var tree = SyntaxTree。 ParseCompilationUnit (テキスト) ;
var compilation =コンパイル。 作成 (
「calc.dll」 、
options : 新しい CompilationOptions ( assemblyKind : AssemblyKind。DynamicallyLinkedLibrary ) 、
syntaxTrees : new [ ] { tree } 、
参照: new [ ] { new AssemblyFileReference ( typeof ( object ) .Assembly.Location ) } ) ;
コンパイルされたアセンブリ
使用 ( var stream = new MemoryStream ( ) )
{
EmitResult compileResult =コンパイル。 放出 (ストリーム) ;
compileAssembly =アセンブリ。 Load (ストリーム。GetBuffer ( ) ) ;
}
calc = compileAssemblyと入力します。 GetType ( "Calc" ) ;
MethodInfo eval = calc。 GetMethod ( "Eval" ) ;
文字列 answer = eval。 ( null 、 null )を 呼び出し ます 。 ToString ( ) ;
アサートします。 AreEqual ( "42" 、回答) ;
注:この段階では、言語機能の一部のみが現在のCTPに実装されています。 私たちは速いペースで前進していますが、LINQクエリ、属性、イベント、動的、非同期などの機能はまだ実装されていません。 Roslynフォーラムにアクセスして、実装されていないものの完全なリストを表示できます。
すべての言語機能がサポートされているわけではありませんが、パブリックAPIフォームの方が多く含まれています。 したがって、Syntax、Symbol、FlowおよびRegion Analysis APIを使用して拡張機能とユーティリティを作成することをお勧めします。
この技術の早期プレビューを提供できることを非常に嬉しく思い、フィードバック、アイデア、提案をお待ちしています。 フォーラムを使用して質問したりフィードバックを提供したり、 Microsoft Connectでバグや提案を投稿したりします。 Twitterでハッシュタグ#RoslynCTPを使用することもできます。