fork(3) download
  1. // ソースコードの雛形
  2. static string cs = @"
  3. using System.IO;
  4. using System.Text;
  5. public class CSHello {
  6. public static void kenmomen(string[] filenames)
  7. {
  8. コピペゾーン♪
  9. }
  10. }";
  11.  
  12. // プラグイン呼び出し用のメソッドオブジェクト
  13. private MethodInfo miKenmomen;
  14.  
  15. private void kenmomen(string[] filenames)
  16. {
  17. // リフレクションでプラグイン実行
  18. this.miKenmomen.Invoke(null, new object[] { filenames });
  19. }
  20.  
  21. private void Form1_Load(object sender, EventArgs e)
  22. {
  23. CSharpCodeProvider cscp = new CSharpCodeProvider();
  24. ICodeCompiler cc = cscp.CreateCompiler();
  25.  
  26. // コンパイルパラメータ(メモリ上にコンパイル、Exeではない。)
  27. CompilerParameters param = new CompilerParameters();
  28. param.GenerateInMemory = true;
  29. param.GenerateExecutable = false;
  30.  
  31. // プラグインソースコードを取得
  32. // ここの文字コードはSJISかUTF8か悩みどころ
  33. string plugin = File.ReadAllText("kenmomen.cs", Encoding.UTF8);
  34.  
  35. // ビルドに必要なDLLを追加
  36. // これも動的に出来ないと詰む可能性あり。
  37. // csファイルに参照DLLセクションを設けるなどの対応が必要。
  38. param.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
  39. param.ReferencedAssemblies.Add("System.dll");
  40. param.ReferencedAssemblies.Add("System.Core.dll");
  41. param.ReferencedAssemblies.Add("System.Data.dll");
  42. param.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
  43. param.ReferencedAssemblies.Add("System.IO.dll");
  44. param.ReferencedAssemblies.Add("System.Xml.dll");
  45. param.ReferencedAssemblies.Add("System.Xml.Linq.dll");
  46.  
  47. // ソースコード雛形にプラグインをマージしてコンパイル
  48. CompilerResults cr = cc.CompileAssemblyFromSource(param, cs.Replace("コピペゾーン♪", plugin));
  49.  
  50. // コンパイルされた型とメソッドを取り出す。
  51. Type type = cr.CompiledAssembly.GetType("CSHello");
  52. this.miKenmomen = type.GetMethod("kenmomen");
  53. }
  54.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cs(13,15): error CS1525: Unexpected symbol `string', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
prog.cs(24,16): error CS1525: Unexpected symbol `MethodInfo', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
prog.cs(26,16): error CS1525: Unexpected symbol `void', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
prog.cs(26,37): warning CS0658: `]' is invalid attribute target. All attributes in this attribute section will be ignored
prog.cs(65,1): error CS8025: Parsing error
Compilation failed: 4 error(s), 1 warnings
stdout
Standard output is empty