我用代码动态生成时,需要编译的代码是:

 

 1发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System;
 2发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.Windows.Forms;
 3发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.Threading;
 4发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.Reflection;
 5发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.IO;
 6发现assembly的dll在temp里,AppDomain无法动态加载那个assembly
 7发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.Security;
 8发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyusing System.Security.Permissions;
 9发现assembly的dll在temp里,AppDomain无法动态加载那个assembly
10发现assembly的dll在temp里,AppDomain无法动态加载那个assembly
11    }


采用的编译属性是:

1发现assembly的dll在temp里,AppDomain无法动态加载那个assembly            compilerParams.GenerateExecutable=false;
2发现assembly的dll在temp里,AppDomain无法动态加载那个assembly            compilerParams.GenerateInMemory=false;
3发现assembly的dll在temp里,AppDomain无法动态加载那个assembly            compilerParams.IncludeDebugInformation=false;
这样,你执行代码时,Compiler就会在系统temp(就是:C:\Documents and Settings\****\Local Settings\Temp)目录下.但是当你创建一个应用程序域。
1发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyAppDomain domain = AppDomain.CreateDomain("MyNewDomain"nullnull);
然后通过这个域去加载刚才生成的assembly时:
1发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyobject test = domain.CreateInstanceFromAndUnwrap(assembly.CodeBase, "Test");
注:assembly就是刚才编译后得到的。
但是通过下列代码发现:
1发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyMethodInfo [] mis = test.GetType().GetMethods();
2发现assembly的dll在temp里,AppDomain无法动态加载那个assembly    foreach(MethodInfo min in mis)
3    }
出来的并不是我想要的结果,只有MarshalByRefObject的方法,并没有Click
TestMethod 的方法。
但是我若用下列代码加载:
1发现assembly的dll在temp里,AppDomain无法动态加载那个assemblyobject test = Activator.CreateInstanceFrom(assembly.CodeBase,"Test").Unwrap();
就能得到正确的结果。是个问题,得研究研究

相关文章: