わかりました、その場で 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 の 3 つのファイルを作成することでした。そして、.csproj ファイルでそれらを手動で参照することで、アセンブリを msbuild でコンパイルし、それを移動してターゲット プロジェクトの以前のアセンブリに置き換えることができました。これは、信じられないかもしれませんが、完璧に機能しましたが、これは適切なアプローチではないと誰かが考えたので、前に言ったように、今は逆の方法を試しています.