我正在学习在运行时使用
CSharpCodeProvider
,
CompilerParameters
,
CompilerResults
诸如此类。
我能够得到字符串的内容
通过
一种方法。
public static string Test() //This is in the file to be compiled.
{
return "This is a test string!";
}
使用
MethodInfo main = program.GetMethod("Test"); //This is in the main program.
//program is a Assembly Type generated in another part of the program.
str=main.Invoke(null, null).ToString();
去拿绳子。
我怎样才能直接拿到绳子?例如
public string str="This is a test string!"; //This is in the file to be compiled.
我试着把字符串变成一种属性并加以使用
GetProperty("str");
,但它得到的只是
名称
财产的所有权。
str
,我不知道怎样才能拿到
所容纳之物
绳子的长度。
这是一个测试字符串!
.
以下是代码:
using System.IO;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
namespace MudOS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
parameters.GenerateInMemory = true;
parameters.GenerateExecutable = true;
string str = File.ReadAllText(Directory.GetCurrentDirectory() + @"\MudLib\Test.c");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, str);
if (results.Errors.HasErrors)
{
MessageBox.Show("Compiling error!");
return;
}
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("MudOS.Test");
MethodInfo main = program.GetMethod("Test");
resultString=main.Invoke(null, null).ToString();
MessageBox.Show(resultString);
PropertyInfo pinfo = program.GetProperty("str");
MessageBox.Show(pinfo.Name.ToString());
//I want the CONTENT of the string, not the NAME.
}
}
}
下面是运行时要编译的文件:Test。C
using System.Windows.Forms;
namespace MudOS
{
class Test
{
public string testStr="This is a test string!";
//I would like to know if it's possible to get this string directly.
public string str
{
get{ return "This is a test string!"; }
//I was unable to get this content.
}
public static void Main()
{
}
public static string Test()
{
return "This is a test string!";
//I was able to get this content just fine.
}
}
}