我在ASP.Net中有足够的代码来使用roslyn编译器执行C#的代码。但是,我使用ASP.Net Web表单来构建用于执行代码的用户界面。因此,我想从一个文本框中获取代码,并通过“编译”按钮在另一个文本框中显示结果。
因此,我有以下控件:
<%@ 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>
这里是使用C#的Handler事件:
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)
{
}
}
}
如何显示TextBox2中代码(TextBox3)的执行结果?
Iam在ASP.Net环境中的初学者,有帮助吗?
恐怕我离开发人员电脑不远,所以我无法测试代码,但是想到的是:
您没有使用的结果session.Execute(code);
,因此如果用户放入3+3
,它将被执行,返回值将为6,但由于未捕获,因此将超出范围。相反,如果您这样做了object result = session.Execute(code);
,则输出将为整数6;否则,输出为0。然后,您可以调用.ToString()result
并将其放在文本框中。
当然要小心,允许用户在您的Web服务器上执行任意代码...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句