简介
,使用开源和商业试用代码生成后,我并不完全符合任何特定的解决方案感到高兴。下面的文章提供了一个框架,用于创建自己的代码发生器和细节,它是如何工作的。在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来源如下:
Windows应用程序主机Your name is: <%=this.Request.Form["Name"]%>
这是可能的主机内一个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}