知识大全 详解.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/14546

相关参考

知识大全 详解.NET中的动态编译

详解.NET中的动态编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行是一

知识大全 详解.NET中的动态编译技术

详解.NET中的动态编译技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行

知识大全 详解.NET中的动态编译[1]

详解.NET中的动态编译[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执

知识大全 详解.NET中的动态编译技术[1]

详解.NET中的动态编译技术[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译

知识大全 详解.NET中的动态编译[3]

详解.NET中的动态编译[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!usingSystem

知识大全 详解.NET中的动态编译[5]

详解.NET中的动态编译[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于客户端的输入程

知识大全 详解.NET中的动态编译[2]

详解.NET中的动态编译[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  需要解释的是这里我

知识大全 详解.NET中的动态编译技术[3]

详解.NET中的动态编译技术[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ·创建另外一个

知识大全 详解.NET中的动态编译技术[5]

详解.NET中的动态编译技术[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于客户端的输

知识大全 详解.NET中的动态编译技术[2]

详解.NET中的动态编译技术[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  需要解释的是这