[英]Is there any way to create, compile and load dynamically an ASPX page
好的,我想知道是否可以即時創建ASPX頁面。 我的意思是,我之前已經做過*,但是我事先知道我正在創建哪個程序集,並且我已經預先在目標項目中引用了該程序集(所以我只是用新的程序集來補充舊的程序集)。 但是現在,除了這個以外,我還創建了ASPX頁面需要的所有文件(aspx,代碼隱藏和設計器),並將對該最終程序集的引用添加到當前正在執行的程序集中,這樣我就可以從那里導航到該頁面。
到目前為止,由於有了CodeDom,我已經能夠將背后的代碼(設計師似乎很容易)編譯為程序集文件,並設法動態加載該程序集。 但是我不知道如何通過該程序集訪問這個動態創建的頁面,我想我也必須創建一個.aspx文件(我想不可能將.aspx附加到生成的程序集上) 。
這可能是我要達到的目標的錯誤方法,因此,如果有人可以提出一些建議,我將很高興:)
我添加一些代碼,如果可以幫助任何人:
CodeDomProvider c = CodeDomProvider.CreateProvider("CSharp");
Assembly executingAssembly = Assembly.GetExecutingAssembly();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.ReferencedAssemblies.Add("system.web.dll");
cp.ReferencedAssemblies.Add("system.data.dll");
cp.ReferencedAssemblies.Add("system.xml.linq.dll");
cp.ReferencedAssemblies.Add("system.drawing.dll");
cp.CompilerOptions = "/t:library";
cp.OutputAssembly = "paginatal.dll";
cp.GenerateInMemory = false;
StringBuilder sb = new StringBuilder(""); //Texto del codigo
sb.Append("using System;\n");
sb.Append("using System.Collections.Generic;");
sb.Append("using System.Web;");
sb.Append("using System.Web.UI;");
sb.Append("using System.Web.UI.WebControls;");
sb.Append("namespace NuevaClase{ \n");
sb.Append("public partial class NuevaClase : System.Web.UI.Page { \n");
sb.Append("public String Yuhuu(){\n return \"Yuhuuuu\";\n }\n");
sb.Append("protected void Page_Load(object sender, EventArgs e){\n");
sb.Append("");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
Console.WriteLine("Error");
}
Assembly a = cr.CompiledAssembly;
Assembly.LoadFrom(a.Location);
*我要做的是創建三個文件:.aspx,aspx.cs和aspx.cs.designer; 然后在.csproj文件中手動引用它們,因此我可以使用msbuild程序集進行編譯,然后將其移動以替換目標項目中的前一個程序集。 不管您是否相信,這種方法都可以很好地工作,但是有人認為這不是正確的方法,現在我正按照我之前告訴您的方法嘗試另一種方法。
It might be a wrong approach to what I'm trying to achieve,
so I'll be glad if anyone can shed some light uppon this :)
我認為您錯過了目標。
目標是:顯示信息,即響應的輸出。
為此,我們使用asp.net來幫助我們以編程方式創建該輸出。
您嘗試做的是:創建一個頁面,然后創建第二個頁面,然后進行輸出。 這是為什么 ? 為什么不直接使用asp.net編程來顯示您的輸出和信息,為什么呢? 您要更改的名稱是否在頁面頂部?
使您的頁面像這樣的減號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.