Visual Studio Express で Roslyn [プログラム]
Microsoft “Roslyn” CTP をVisual Studio Expressで使った際のメモ。
Roslynとは
要はC#とかVBのコンパイラをマネージドコードで書き直してAPIを公開し、いろんなツールから使えるようにしましょう、という理解。ツール毎に解析ロジックを再発明しているのは、プログラミング言語の解析関連の仕事をしている人の間では共通の問題意識だと思うので、C#の意味解析までやってくれる共通基盤を本家が提供してくれるというのはなかなかうれしい。
まずは普通にインストール・・・
Download Center から、RoslynSetup.exe をダウンロードしてインストールしようとするも、"Visual Studio 2010 Service Pack 1"がないよ、と怒られインストールできない。
入ってんだけどなー?うーん、としばし悩んだ末以下を発見。
Required Pre-installed Products:- SP1 versions of Visual Studio 2010 Professional, Premium, or Ultimate
- Visual Studio 2010 SP1 SDK
Expressではダメか・・・
NuGetでインストール
と、あきらめていたところ、NuGetでRoslyn CTPが配布されているという話を聞いた。これなら、Expressでも使えるかも!?ただしVisual Studio から NuGet を使うには、これまた Professional 以上でないとダメ、コマンドラインから使わないといけないらしい。ということでこの手順のまとめ。
- コマンドのダウンロード
http://nuget.codeplex.com/ から[Downloads]、[NuGet.exe Command Line bootstrapper] にある、[NuGet.exe Command Line] のリンクでNuGet.exeをダウンロード - コマンドのインストール
どこかにディレクトリを作り(この中にNuGetでインストールしたパッケージも入る)、NuGet.exe を置く。このNuGet.exeを実行すると、最新版のNuGet.exeで置き換えてくれる。なので"bootstrapper"なのね。 - Roslynのインストール
コマンドラインから「NuGet.exe install Roslyn」で実行。「Successfully installed 'Roslyn 1.0.11014.5'.」と出ればOK。
これで、NuGet.exeを置いたディレクトリに、Roslyn.1.0.11014.5 というディレクトリができているはず。
使ってみる
NuGetでインストールした場合、Visual Studio のテンプレートは入らないので、若干手間が増える。
- プロジェクトの作成
普通に、Visual C# を立ち上げ、[ファイル]-[新しいプロジェクト]を選択し、"コンソールアプリケーション"を選んで[OK] - 参照の追加
[ソリューションエクスプローラー]で、"参照設定"を右クリックして[参照の追加]を選択。[参照の追加]ダイアログで[参照タブ]をクリックし、"/Roslyn.1.0.11014.5/lib/net40/"の、"Roslyn.Compilers.CSharp.dll"と"Roslyn.Compilers.dll"を選択して[OK] - ソース
とりあえず、こんな感じで書いてみる。using System; using System.Collections.Generic; using System.Linq; using System.Text; using Roslyn.Compilers; using Roslyn.Compilers.CSharp; namespace RoslynSample1 { class Program { public static string src = @" using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine(""Hello, World!""); } } } "; static void Main(string[] args) { var st = ((ExpressionStatementSyntax)Syntax .ParseStatement(src, 110)); var exp = (InvocationExpressionSyntax)st.Expression; var arg = (ArgumentSyntax)exp.ArgumentList.Arguments[0]; Console.WriteLine(arg.ToString()); } } }
- 実行
「"Hello, World!"」と表示されればOK
Передаем Вам сведения об одорении решения выплатить Вам денежный бонус. Рекомендуем прямо сейчас Обязательно уточнить детали перейдя по ссылке на официальную страницу в течение 5 часов пока Ваш доступ в систему не заблокирован!Переход на страницу: https://google.com
by Ставим Вас в известность об одорении решения выплатить Вам денежные средства. Рекомендуется сиюсекундно оформить детали перейдя по ссылке на основную страницу сервиса в срок до 15.10.2019. пока Ваш доступ в систему не заблокирован!Переход на страницу: https://google.com (2019-10-14 08:12)
Информируем Вас о том что принято решение выплатить Вам денежный бонус. Рекомендуется сиюминутно уточнить детали зайдя по ссылке на главную страницу сервиса в течение 30 минут пока Ваш доступ в систему не аннулирован!Переход на страницу: https://bit.ly/3aWmE5P
by Извещаем Вас о том что принято решение выплатить Вам денежные средства. Настоятельно рекомендуем прямо сейчас cрочно оформить детали перейдя по ссылке на основную страницу почтового сервиса в срок до 2 дней. Не пропустите срок!Переход на страницу: https://bit.ly/2yNLNRW (2020-04-12 21:46)