【发布时间】:2018-06-04 02:52:48
【问题描述】:
我正在学习使用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,我不知道如何获取字符串的content,例如。 这是一个测试字符串!。
以下是代码:
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.
}
}
}
【问题讨论】:
-
如果您能提供minimal reproducible example,那就太好了。
-
会的!更新中!!!
标签: c# string properties compilation