Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight GUI中的C#代码验证_C#_Silverlight_User Interface_User Controls - Fatal编程技术网

Silverlight GUI中的C#代码验证

Silverlight GUI中的C#代码验证,c#,silverlight,user-interface,user-controls,C#,Silverlight,User Interface,User Controls,我正在为学生制作Silverlight应用程序,我正在寻找一个关键组件。在应用程序中,学生应该能够在文本框中添加C代码(一个类)。我想做的是:验证代码是否是有效的C#,理想情况下还要确保它正确地实现了给定的接口。有没有一个控制器可以帮我解决这个问题 Chris基于以下内容的示例代码: 总结并回答我自己的问题(感谢Luke Woodward):这是不可能的,因为System.CodeDom.Compiler命名空间在Silverlight框架中几乎是空的:-(看起来不错。但我有一个问题:这似乎创建

我正在为学生制作Silverlight应用程序,我正在寻找一个关键组件。在应用程序中,学生应该能够在文本框中添加C代码(一个类)。我想做的是:验证代码是否是有效的C#,理想情况下还要确保它正确地实现了给定的接口。有没有一个控制器可以帮我解决这个问题

Chris基于以下内容的示例代码:


总结并回答我自己的问题(感谢Luke Woodward):这是不可能的,因为System.CodeDom.Compiler命名空间在Silverlight框架中几乎是空的:-(

看起来不错。但我有一个问题:这似乎创建了一个实际的文件-有可能只在内存中执行此操作吗?我只是想验证-此时不运行此代码。验证是什么意思?我假设它编译后是一个有效的代码!因此,如果您将其保存到一个临时文件中,并且每次都重写该文件,这会是一个选项吗据我所知,如果您不在OutputAssembly属性中为输出程序集指定文件名,将使用默认的输出文件名。那么,可能存在的问题是,这将在Silverlight应用程序中运行,而该应用程序由于任何其他原因都不需要文件访问,因此这将使事情复杂化……此外,文件i/O是slo而不是在内存中完成。这在Silverlight中不起作用。Silverlight在
System.CodeDom.Compiler
下唯一的类是
GeneratedCodeAttribute
。请参阅
private void button1_Click(object sender, System.EventArgs e)
{
    CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
    string Output = "Out.exe";
    Button ButtonObject = (Button)sender;

    textBox2.Text = "";
    System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
    //Make sure we generate an EXE, not a DLL
    parameters.GenerateExecutable = true;
    parameters.OutputAssembly = Output;
    CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text);

    if (results.Errors.Count > 0)
    {
        textBox2.ForeColor = Color.Red;
        foreach (CompilerError CompErr in results.Errors)
        {
            textBox2.Text = textBox2.Text +
                        "Line number " + CompErr.Line +
                        ", Error Number: " + CompErr.ErrorNumber +
                        ", '" + CompErr.ErrorText + ";" +
                        Environment.NewLine + Environment.NewLine;
        }
    }
    else
    {
        //Successful Compile
        textBox2.ForeColor = Color.Blue;
        textBox2.Text = "Success!";
        //If we clicked run then launch our EXE
        if (ButtonObject.Text == "Run") Process.Start(Output);
    }
}
Add the beginning of the file, add these using statements:
using System.CodeDom.Compiler;
using System.Diagnostics;