自作プログラムにC#スクリプトの実行機能を組み込む場合、自作プログラムの中でC#スクリプトを編集したくなりますよね。
TextBoxを使っても構わないのですが、Visual Studioの様なコード補完機能がありません。
しかし、RoslynPadというフリーのコントロールを使うことで、一般のテキストエディタっぽい入力とC#コードの補完機能が使えるようになります。
今回は、このRoslynPadの組み込み方について解説いたします。
RoslynPadの動作
あたかもVisual Studioでソースコードを編集しているのに近い補完機能が使えるようになります。

インストール方法
インストール方法というか、自作プログラムのプロジェクトに組み込むには、NuGetを使います。
NuGetの詳しい使い方が知りたい方は、こちらをご覧ください。
Visual Studio のメニューから「ツール」→「NuGetパッケージマネージャ」→「ソリューションのNuGetパッケージの管理」を選択すると下記の画面が表示されますので、”Roslyn pad”で検索してください。
そして、”RoslynPad.Editor.Windows”を選択し、インストールします。
最新バージョン1.2.0 は Framework 4.8 が入っていないとインストールできませんのでご注意ください。
私の環境で Framework 4.8 をインストール後、最新版をインストールしてみたところ、実行時に「アセンブリが参照できない」というエラーが発生します。
Frameworkのバージョンが 4.7.2 で、 RoslynPad.Editor.Windows のバージョンが 1.0.4 の場合は動作確認が出来ていますので、あえてバージョンダウンしています。

組み込み方法
RoslynPad を実際に使う場合、XAMLとC#に記述が必要です。
まず最初に、XAMLに次のような参照とコントロールを記述します。
ちなみに、RoslynPadの正式名称は RoslynCodeEditor なので、そのように記述します。

下記は具体的なサンプルです。
ここでは、RoslynPadに uxEditor という名前を付けていることに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<Window x:Class="RoslynPadTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:RoslynPadTest" xmlns:editor="clr-namespace:RoslynPad.Editor;assembly=RoslynPad.Editor.Windows" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <editor:RoslynCodeEditor x:Name="uxEditor" ></editor:RoslynCodeEditor> </Grid> </Window> |
C#側では冒頭の参照設定に次の4行を追加します。
1 2 3 4 5 |
using System.IO; using System.Reflection; using RoslynPad.Roslyn; using RoslynPad.Editor; |
次に、コンストラクタに次の4行を記載します。
1 2 3 4 5 6 7 |
var host = new RoslynHost(additionalAssemblies: new[] { Assembly.Load("RoslynPad.Roslyn.Windows"), Assembly.Load("RoslynPad.Editor.Windows") }); uxEditor.Initialize(host, new ClassificationHighlightColors(), Directory.GetCurrentDirectory(), String.Empty); |
上記2点を実際に組み込んだサンプルは次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO; using System.Reflection; using RoslynPad.Roslyn; using RoslynPad.Editor; namespace RoslynPadTest { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var host = new RoslynHost(additionalAssemblies: new[] { Assembly.Load("RoslynPad.Roslyn.Windows"), Assembly.Load("RoslynPad.Editor.Windows") }); uxEditor.Initialize(host, new ClassificationHighlightColors(), Directory.GetCurrentDirectory(), String.Empty); } } } |
まとめ
以上で内容は終了です。
自作プログラムに簡単に組み込むことができますので、自作プログラムの中でC#スクリプトを記述させたい方は、是非ご活用下さい。