我用代码动态生成时,需要编译的代码是:
1
using System;
2
using System.Windows.Forms;
3
using System.Threading;
4
using System.Reflection;
5
using System.IO;
6![](/Images/OutliningIndicators/None.gif)
7
using System.Security;
8
using System.Security.Permissions;
9![](/Images/OutliningIndicators/None.gif)
10![](/Images/OutliningIndicators/None.gif)
11
/// <summary>
12
/// Class1 的摘要说明。
13
/// </summary>
14
///
15
16
public class Test : MarshalByRefObject
17
{
18
public void TestMethod(string srcAppDomain)
19
{
20
FileStream fs = File.Create("11.txt");
21
fs.Close();
22
23
}
24
public void Click(object sender, System.EventArgs e)
25
{
26
MessageBox.Show("hi");
27
}
28
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
采用的编译属性是:
1
compilerParams.GenerateExecutable=false;
2
compilerParams.GenerateInMemory=false;
3
compilerParams.IncludeDebugInformation=false;
这样,你执行代码时,Compiler就会在系统temp(就是:C:\Documents and Settings\****\Local Settings\Temp)目录下.但是当你创建一个应用程序域。![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
1
AppDomain domain = AppDomain.CreateDomain("MyNewDomain", null, null);
然后通过这个域去加载刚才生成的assembly时:![](/Images/OutliningIndicators/None.gif)
1
object test = domain.CreateInstanceFromAndUnwrap(assembly.CodeBase, "Test");
注:assembly就是刚才编译后得到的。![](/Images/OutliningIndicators/None.gif)
但是通过下列代码发现:
1
MethodInfo [] mis = test.GetType().GetMethods();
2
foreach(MethodInfo min in mis)
3
{
4
MessageBox.Show(min.Name);
5
}
出来的并不是我想要的结果,只有MarshalByRefObject的方法,并没有Click ![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
TestMethod 的方法。
但是我若用下列代码加载:
1
object test = Activator.CreateInstanceFrom(assembly.CodeBase,"Test").Unwrap();
就能得到正确的结果。是个问题,得研究研究
![](/Images/OutliningIndicators/None.gif)