知识大全 详解.NET中的动态编译技术[4]
Posted 知
篇首语:少年击剑更吹箫,剑气箫心一例消。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 详解.NET中的动态编译技术[4]相关的知识,希望对你有一定的参考价值。
详解.NET中的动态编译技术[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
接下来在原来基础上需要修改的是
· 将编译成的DLL保存到磁盘中
· 创建另外的AppDomain
· 获得IRemoteInterface接口的引用 (将生成的DLL加载到额外的AppDomain)
· 调用InvokeMethod方法来远程调用
· 可以通过AppDomain Unload()方法卸载程序集
以下是完整的代码 演示了如何应用这一方案
//get the code to pile
string strSourceCode = this txtSource Text;
// Create an addtional AppDomain
AppDomainSetup objSetup = new AppDomainSetup();
objSetup ApplicationBase = AppDomain CurrentDomain BaseDirectory;
AppDomain objAppDomain = AppDomain CreateDomain( MyAppDomain null objSetup);
// Create a new CSharpCodePrivoder instance
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// Sets the runtime piling parameters by crating a new CompilerParameters instance
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters ReferencedAssemblies Add( System dll );
objCompilerParameters ReferencedAssemblies Add( System Windows Forms dll );
// Load the remote loader interface
objCompilerParameters ReferencedAssemblies Add( RemoteAccess dll );
// Load the resulting assembly into memory
objCompilerParameters GenerateInMemory = false;
objCompilerParameters OutputAssembly = DynamicalCode dll ;
// CompilerResults: Complile the code snippet by calling a method from the provider
CompilerResults cr = objCSharpCodePrivoder CompileAssemblyFromSource(objCompilerParameters strSourceCode);
if (cr Errors HasErrors)
string strErrorMsg = cr Errors Count ToString() + Errors: ;
for (int x = ; x < cr Errors Count; x++)
strErrorMsg = strErrorMsg + \\r\\nLine: +
cr Errors[x] Line ToString() + +
cr Errors[x] ErrorText;
this txtResult Text = strErrorMsg;
MessageBox Show( There were build erros please modify your code Compiling Error );
return;
// Invoke the method by using Reflection
RemoteLoaderFactory factory = (RemoteLoaderFactory)objAppDomain CreateInstance( RemoteAccess RemoteAccess RemoteLoaderFactory ) Unwrap();
// with help of factory create a real LiveClass instance
object objObject = factory Create( DynamicalCode dll Dynamicly HelloWorld null);
if (objObject == null)
this txtResult Text = Error: + Couldn t load class ;
return;
// *** Cast object to remote interface avoid loading type info
IRemoteInterface objRemote = (IRemoteInterface)objObject;
object[] objCodeParms = new object[ ];
objCodeParms[ ] = Allan ;
string strResult = (string)objRemote Invoke( GetTime objCodeParms);
this txtResult Text = strResult;
//Dispose the objects and unload the generated DLLs
objRemote = null;
AppDomain Unload(objAppDomain);
System IO File Delete( DynamicalCode dll );
cha138/Article/program/net/201311/14505相关参考
详解.NET中的动态编译技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译并执行
详解.NET中的动态编译技术[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译
详解.NET中的动态编译技术[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ·创建另外一个
详解.NET中的动态编译技术[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于客户端的输
详解.NET中的动态编译技术[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 需要解释的是这
详解.NET中的动态编译 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译并执行是一
详解.NET中的动态编译[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译并执
详解.NET中的动态编译[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!usingSystem
详解.NET中的动态编译[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于客户端的输入程
详解.NET中的动态编译[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 需要解释的是这里我