現在持っているスクリプト ソリューションを C# に移行しようと考えています。これにより、さまざまなプラットフォームでの実行に関して現在直面している問題のいくつかが解決されると信じています。スクリプト内にある関数を呼び出してその変数にアクセスすることはできますが、スクリプトが存在するクラスから関数を呼び出すことができるようにしたいと考えています。これ?
これは、スクリプト内のオブジェクトを呼び出してアクセスするために機能している現時点での私のコードですが、スクリプト内から「Called」メソッドを呼び出すことができるようにしたいのですが、できません:
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.CSharp;
namespace scriptingTest
{
class MainClass
{
public static void Main (string[] args)
{
var csc = new CSharpCodeProvider ();
var res = csc.CompileAssemblyFromSource (
new CompilerParameters ()
{
GenerateInMemory = true
},
@"using System;
public class TestClass
{
public int testvar = 5;
public string Execute()
{
return ""Executed."";
}
}"
);
if (res.Errors.Count == 0) {
var type = res.CompiledAssembly.GetType ("TestClass");
var obj = Activator.CreateInstance (type);
var output = type.GetMethod ("Execute").Invoke (obj, new object[] { });
Console.WriteLine (output.ToString ());
FieldInfo test = type.GetField ("testvar");
Console.WriteLine (type.GetField ("testvar").GetValue (obj));
} else {
foreach (var error in res.Errors)
Console.WriteLine(error.ToString());
}
Console.ReadLine ();
}
static void Called() // This is what I would like to be able to call
{
Console.WriteLine("Called from script.");
}
}
}
私は Mono でこれを行おうとしていますが、これが解決方法に影響するとは思いません。