我正在建立一个像Visual Studio中那样的小立即窗口。我只是尝试在Textedit中编译Text。现在我的问题:我如何进入我的运行程序的范围?是否可以更改我的程序的值或列表? 那是我当前的编译代码:
private void SimpleButtonCompileClick(object sender, EventArgs e)
{
CompilerParameters compilerParameters = new CompilerParameters();
compilerParameters.GenerateExecutable = true;
compilerParameters.GenerateInMemory = true;
compilerParameters.TreatWarningsAsErrors = true;
compilerParameters.CompilerOptions = "/nowarn:1633";
String sourceCode = "";
string pattern =
"\\s*#pragma\\s+reference\\s+\"(?<path>[^\"]*)\"\\s*";
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(sourceCode, pattern);
if (match.Success)
compilerParameters.ReferencedAssemblies.Add(match.Groups["path"].Value);
// Specify .NET version
Dictionary<string, string> providerOptions =
new Dictionary<string, string>();
providerOptions.Add("CompilerVersion", "v3.5");
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
// Compile source
CompilerResults results = provider.CompileAssemblyFromSource(compilerParameters, new string[] {sourceCode});
// Show errors
if (results.Errors.HasErrors)
{
String errorString = "";
foreach (var err in results.Errors)
errorString += err + "\n";
XtraMessageBox.Show(errorString);
}
else
{
// Invoke compiled assembly's entry point
results.CompiledAssembly.EntryPoint.Invoke
(null, new object[0] {});
}
}
答案 0 :(得分:0)
我知道你有一种方法(一个按钮?一个组合键?),它会显示一个表单,您可以在其中输入要编译和执行的代码。由于Invoke是在同一进程和AppDomain中执行的,因此只要您拥有要访问的内容的访问点,就可以访问正在运行的程序中的所有内容。
例如,它可以是其中一个类中的公共静态变量。或者,要获取特定表单,可以使用Application.OpenForms并遍历FormCollection,查找具有正确类型的表单。