Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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
如何在ASP.NETWeb表单中使用Roslyn执行C#代码?_C#_Asp.net_Webforms_Roslyn - Fatal编程技术网

如何在ASP.NETWeb表单中使用Roslyn执行C#代码?

如何在ASP.NETWeb表单中使用Roslyn执行C#代码?,c#,asp.net,webforms,roslyn,C#,Asp.net,Webforms,Roslyn,我在ASP.Net中有大量代码,用于使用roslyn编译器执行C#的代码。但是,我使用ASP.NETWeb表单构建用户界面以执行代码。所以,我想从一个文本框中提取代码,然后通过“编译”按钮将结果显示在另一个文本框中 因此,我有以下控制: <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inhe

我在ASP.Net中有大量代码,用于使用roslyn编译器执行C#的代码。但是,我使用ASP.NETWeb表单构建用户界面以执行代码。所以,我想从一个文本框中提取代码,然后通过“编译”按钮将结果显示在另一个文本框中

因此,我有以下控制:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>Compiler Tool</h1>
            </hgroup>
            <p>
                You can compile your source code of C# using Roslyn Compiler from Microsoft</p>
            <br/>

            <p>
                <asp:TextBox ID="TextBox3" runat="server" Height="185px"  Width="480px" OnTextChanged="TextBox3_TextChanged"></asp:TextBox>
            </p>
            <p>

                <asp:Button ID="Button2" runat="server" onclick="Button_Click" Text="Compile" ForeColor="Black" />
            </p>
            <p>
                <asp:TextBox ID="TextBox2" runat="server" Height="138px" Width="390px" ></asp:TextBox>
            </p>
        </div>
    </section>
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    </asp:Content>
如何在TextBox2中显示代码(TextBox3)的执行结果


我是ASP.Net环境的初学者,有什么帮助吗?

我恐怕不在开发人员电脑附近,所以我无法测试代码,但我想到的是:

您没有使用session.Execute(code)的结果,因此如果用户将其放入
3+3
,它将被执行,返回值将为6,但由于它未被捕获,因此它将超出范围。如果相反,您执行了
objectresult=session.Execute(code),输出为整数6;然后可以在
result
上调用.ToString(),并将其放入文本框中


当然,允许用户在您的web服务器上执行任意代码时要小心…

实际上,我需要构建一个简单的工具来支持我的研究,以便在web应用程序中将其作为原型显示出来。我是作为控制台应用程序完成的,它可以工作,但现在我必须构建用户界面,接受用户的代码,并以简单的方式呈现结果。所以,如果你知道怎么做,请指导我。Roslyn的execute API背后的代码是什么???Thanx Rob,这就是这里缺少的。然而,它可以用于数字计算,但当我尝试简单的C代码时,比如“Console.WriteLine(“Hello World”)”,它会抛出NullReference异常错误。这里的问题是关于正在执行的Roslyn API吗??!我觉得Roslyn结构的问题在于,它作为不同API.Console.WriteTine的树工作,不返回任何内容,因此这将是您的空引用异常。要捕捉到这一点,您可以尝试设置Console。设置为文本编写器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;


namespace WebApplication2
{
    public partial class _Default : Page
    {



        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button_Click(object sender, EventArgs e)
        {

            var engine = new ScriptEngine();
            var session = engine.CreateSession();
            String code = TextBox3.Text;
            session.Execute(code);

        }

        protected void TextBox3_TextChanged(object sender, EventArgs e)
        {

        }
    }
}