簡體   English   中英

有什么方法可以動態創建,編譯和加載ASPX頁面

[英]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編程來顯示您的輸出和信息,為什么呢? 您要更改的名稱是否在頁面頂部?

使您的頁面像這樣的減號。

  1. 您可能無法處理的錯誤
  2. 每次創建新頁面時,編譯器可能會重新編譯整個網站或網站的一部分。
  3. 很可能創建使您的系統崩潰的沖突類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM