如何在ASP.NETWeb表单中使用Roslyn执行C#代码?
我在ASP.Net中有大量代码,用于使用roslyn编译器执行C#的代码。但是,我使用ASP.NETWeb表单构建用户界面以执行代码。所以,我想从一个文本框中提取代码,然后通过“编译”按钮将结果显示在另一个文本框中 因此,我有以下控制:如何在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
<%@ 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)
{
}
}
}