用户:  密码: 记住我     找回密码 
| 文章 >> 平台,框架和库 >> .NET Framework

代码生成,使用ASP.NET主机

日期 | 作者西蒙McEnlly | 浏览86 | 评分100 | 标签.NET Framework 评论
简介
,使用开源和商业试用代码生成后,我并不完全符合任何特定的解决方案感到高兴。下面的文章提供了一个框架,用于创建自己的代码发生器和细节,它是如何工作的。在IDE的特点。例如:源代码控制集成智能感知整合现有的项目和解决方案的能力,可以用来产生输出时设置的参数创建一个ASP.NET网站
代码生成器将创建一个ASP.NET网站内(而不是一个Web应用程序)。这使我们的出版没有ASPX或代码的文件的源代码是可见的一个预编译网站的优势。预编译的网站,以后可以混淆的,如果需要的话。
添加两个用户控件项目和页面调用:ParametersControlExecutionControl
Default.aspx的源代码如下所示:
 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" 

          Inherits="_Default" %>

 <%@ Register Src="ExecutionControl.ascx" TagName="ExecutionControl"

              TagPrefix="uc1" %>

 <%@ Register Src="ParametersControl.ascx" TagName="ParametersControl" 

              TagPrefix="uc2" %>

 <uc1:ExecutionControl ID="ExecutionControl" runat="server" />

 <uc2:ParametersControl ID="ParametersControl" runat="server" />


修改代码的文件,所以该参数控制只显示如果没有的Request.Form项目,而执行控制,只显示如果有项目的Request.Form。{C}ParametersControl
控制参数是用来提供参数从我们的主机代码生成器。参数控制使用HTML控件,使发布的数据可以直接生成我们的输出时,使用的Request.Form访问。 ParametersControl.ascx来源如下:
<html>

<body>

    <form name="ParamForm" runat="server">

        Name:

        <input name="Name" type="text" style="width: 317px" /><br />

        <input name="Submit1" type="submit" value="Execute" />

    </form>

</body>

</html>


注意:参数控制不包含任何代码。ExecutionControl
执行控制是用来执行的代码生成。参数使用的Request.Form访问。 ExecutionControl.ascx来源如下:
Your name is: <%=this.Request.Form["Name"]%>

Windows应用程序主机
这是可能的主机内一个Windows应用程序的ASP.NET运行。样品中所附的主机将提供一个在应用程序的物理目录的根所有ASPX文件列表。
当一个文件被选中,该网页将加载在浏览器中的控制,嵌入式主机应用程序内。
当一个文件执行回发到服务器,浏览器的请求将被拦截和调用将到ASP.NET运行时。ASPNETHost图书馆
当创建ASP.NET主机,一个类必须提供作为主机类型。 Web应用程序的需要,包括库,其中包含这个类的引用。源创建ASP.NET主机如下:
using System.Web;

 

public static ASPNETHost CreateASPNETHost(string physicalRoot)

{

    return (ASPNETHost)Hosting.ApplicationHost.CreateApplicationHost(

                                    typeof(ASPNETHost), "/", physicalRoot);

}


下面的源代码演示了如何捕获从ASP.NET运行时的输出页面:
StringWriter sw = new StringWriter();

HostWorkerRequest swr = new HostWorkerRequest(webPage, query, postData, sw);

HttpRuntime.ProcessRequest(swr);

return sw.ToString();


如果需要,我们还可以通过手动创建提交后的数据访问参数页的情况下执行的发电机。要做到这一点的源代码如下:
public string ProcessGenerator(string generatorName, 

                               Dictionary<string, string> settings)

{

    System.Text.StringBuilder sb = new System.Text.StringBuilder();

    

    foreach (KeyValuePair<string, string> kvp in settings)

    {

        if (sb.Length != 0)

        {

            sb.Append("&");

        }

        sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Key));

        sb.Append("=");

        sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Value));

    }



    byte[] postData = System.Text.Encoding.ASCII.GetBytes(sb.ToString());



    return GetPage(generatorName + ".aspx", null, postData);

}
摘要
最后,应提供源代码没有使用第三方工具的代码生成的框架的基础。此外,我们得到的Visual Studio(源头控制,智能感知,帮助等)的所有优点。有些事情要考虑:您可以创建自定义的ASP.NET控件呈现在您的发电机所需输出。你不妨来解析生成的输出,以执行额外的处理。例如:分割成多个文件输出致谢{A}{A2}
关于作者:西蒙McEnlly


中国
我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员:zythra 时间:2011/12/07
我爱的概念,我希望这样的事情很长一段时间,但还没来得及自己做研究。得到样品溶液的机会公布了一些样本模板?
评论会员:西蒙McEnlly 时间:2011/12/07
喜zythra,

除了提供基本样本,输入一个名称和输出生成的页面上,我不会有什么合适的上传,是不是太复杂和/或专有
这篇文章的意图是提供了基本框架,使您可以扩展您的需求,并在Visual Studio中编写自己的模板。
你想什么特别显示在样本?
评论会员:zythra 时间:2011/12/07
这是没有问题的,如果你没有东西可用。我只是觉得这可能是很好的快速下载一个小的解决方案,用户可以只建立和看到一些基本的结果,以显示与功能。不过,不用担心,这是很容易投入到一个项目的主机。
 文章分类
 桌面
 网页开发
 移动开发
 数据库
 多媒体
 编程语言
 平台,框架和库
 编程通用
 图形/设计
 开发周期
 一般阅读
 第三方产品
 作者资源
 其他
快速解答标签
c x 6850
VC x 7405