ASP.NET编程:.NET中的静态编译
有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。代码的静态编译并实行是一个.NET平台供应给我们的很壮大的工具用以天真扩大(固然是面临外部开辟职员)庞大而没法预算的逻辑,并经由过程一些分外的代码来扩大我们已有的使用程序。这在很年夜水平上给我们供应了别的一种扩大的体例(固然这其实不能算是严厉意义上的扩大,但最少为我们供应了一种思绪)。静态代码实行能够使用在诸如模板天生,外加逻辑扩大等一些场所。一个复杂的例子,为了网站那的呼应速率,HTML静态页面常常是我们最好的选择,但基于数据驱动的网站常常又很难用静态页面完成,那末将静态页面熟成html的事情也许就是一个很好的使用场所。别的,关于一些模板的套用,我们一样能够用它来做。别的这自己也是插件编写的体例。
最基础的静态编译
.Net为我们供应了很壮大的撑持来完成这统统我们能够往做的基本,次要使用的两个定名空间是:System.CodeDom.Compiler和Microsoft.CSharp或Microsoft.VisualBasic。别的还必要用到反射来静态实行你的代码。静态编译并实行代码的道理实在在于将供应的源代码交予CSharpCodeProvider来实行编译(实在和CSC没甚么两样),假如没有任何编译毛病,天生的IL代码会被编译成DLL寄存于于内存并加载在某个使用程序域(默许为以后)内并经由过程反射的体例来挪用其某个办法大概触发某个事务等。之以是说它是插件编写的一种体例也恰是由于与此,我们能够经由过程事后界说好的托言来构造和扩大我们的程序并将其交还给主程序往触发。一个基础的静态编译并实行代码的步骤包含:
1.将要被编译和实行的代码读进并以字符串体例保留
2.声明CSharpCodeProvider工具实例
3.挪用CSharpCodeProvider实例的CompileAssemblyFromSource办法编译
4.用反射天生被天生工具的实例(Assembly.CreateInstance)
5.挪用其办法
以下代码片断包括了完全的编译和实行历程:
//getthecodetocompilestringstrSourceCode=this.txtSource.Text;//1.CreateanewCSharpCodePrivoderinstanceCSharpCodeProviderobjCSharpCodePrivoder=newCSharpCodeProvider();//2.SetstheruntimecompilingparametersbycratinganewCompilerParametersinstanceCompilerParametersobjCompilerParameters=newCompilerParameters();objCompilerParameters.ReferencedAssemblies.Add("System.dll");objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");objCompilerParameters.GenerateInMemory=true;//3.CompilerResults:ComplilethecodesnippetbycallingamethodfromtheproviderCompilerResultscr=objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,strSourceCode);if(cr.Errors.HasErrors){stringstrErrorMsg=cr.Errors.Count.ToString()+"Errors:";for(intx=0;x<cr.Errors.Count;x++){strErrorMsg=strErrorMsg+"
Line:"+cr.Errors.Line.ToString()+"-"+cr.Errors.ErrorText;}this.txtResult.Text=strErrorMsg;MessageBox.Show("Therewerebuilderros,pleasemodifyyourcode.","CompilingError");return;}//4.InvokethemethodbyusingReflectionAssemblyobjAssembly=cr.CompiledAssembly;objectobjClass=objAssembly.CreateInstance("Dynamicly.HelloWorld");if(objClass==null){this.txtResult.Text="Error:"+"Couldntloadclass.";return;}object[]objCodeParms=newobject;objCodeParms="Allan.";stringstrResult=(string)objClass.GetType().InvokeMember("GetTime",BindingFlags.InvokeMethod,null,objClass,objCodeParms);this.txtResult.Text=strResult;<p>据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 那么,ASP.Net有哪些改进呢? 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
页:
[1]