CodeDomで新しいコンパイラを使用したい!
GitHub – aspnet/RoslynCodeDomProvider: Roslyn CodeDOM provider
NuGet packages · dotnet/roslyn Wiki · GitHub(RoslynのバージョンとC#バージョンとの対応)
C# コンパイラを使用してプログラムによってコードをコンパイルする方法
上のサンプルをRoslyn CodeDom providerを使用するように変更した。
using System; using System.Drawing; using System.Windows.Forms; using System.CodeDom.Compiler; using System.Diagnostics; namespace CodeDomainSample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, System.EventArgs e) { //Roslynを使用したCodeDomainProviderを使用する。 CodeDomProvider codeProvider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(); string Output = "Out.exe"; Button ButtonObject = (Button)sender; textBox2.Text = ""; System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); //Make sure we generate an EXE, not a DLL parameters.GenerateExecutable = true; parameters.OutputAssembly = Output; parameters.CompilerOptions = "-langversion:7.3"; // C#のバージョンを指定する。 CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text); if (results.Errors.Count > 0) { textBox2.ForeColor = Color.Red; foreach (CompilerError CompErr in results.Errors) { textBox2.Text = textBox2.Text + "Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine; } } else { //Successful Compile textBox2.ForeColor = Color.Blue; textBox2.Text = "Success!"; //If we clicked run then launch our EXE if (ButtonObject.Text == "Run") Process.Start(Output); } } private void button2_Click(object sender, EventArgs e) { button1_Click(sender, e); } } }
コメント