动态编译

动态编译.NET代码

分为VB和C#两种

Private Sub BuidSub(OneSource As String, OneRef As String, OneExt As String, OneSub As String, OneClass As String)

Dim strSourceCode As String = OneSource

Dim objCSharpCodePrivoder As New CSharpCodeProvider()

Dim objVBCodePrivoder As New VBCodeProvider()

Dim OnePara As New CompilerParameters()

For Each OneStr In OneRef.Split(vbCrLf)

If Not OneStr.Trim.Equals(String.Empty) Then

OnePara.ReferencedAssemblies.Add(OneStr.Trim)

End If

Next

OnePara.GenerateInMemory = True

Dim cr As CompilerResults

If OneExt.ToLower = ".cs" Then

cr = objCSharpCodePrivoder.CompileAssemblyFromSource(OnePara, OneSource)

Else

cr = objVBCodePrivoder.CompileAssemblyFromSource(OnePara, OneSource)

End If

If cr.Errors.HasErrors Then

Dim strErrorMsg As String = cr.Errors.Count.ToString() + " Errors:"

For x As Integer = 0 To cr.Errors.Count - 1

strErrorMsg += vbCrLf & "Line: " & cr.Errors(x).Line.ToString() & " - " & cr.Errors(x).ErrorText

Next

MyPage.ShowException(strErrorMsg)

Else

Try

Dim objAssembly As Assembly = cr.CompiledAssembly

Dim FullName As String = "MyERP.{0}"

FullName = String.Format(FullName, OneClass)

Dim objClass As Object = objAssembly.CreateInstance(FullName)

If objClass Is Nothing Then

MyPage.ShowException(GetMessage("LOAD_CLASS_ERROR", MyParameter.LoginLan))

Else

If ChkProperty(objClass, "Owner") Then

objClass.Owner = Me

End If

CallByName(objClass, OneSub, vbMethod)

End If

Catch ex As Exception

MyPage.ShowException(ex)

End Try

End If

End Sub

来自为知笔记(Wiz)

时间: 2024-08-05 20:44:58

动态编译的相关文章

ANGULARJS 动态编译添加到dom中

在使用angularjs 时,希望通过动态构建angular模版,再通过angular进行展示. 使用 方法如下: <html ng-app="app"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script src="assets/angular.min.js">

程序动态编译代码

c#可以在程序运行过程中动态的编译代码,并生成程序集加载在内存,然后就可以动态的调用代码生成的程序了,这有点像我们的vs编译器,感兴趣的可以制作属于自己的c#编译器: 要实现这种功能,我们只需要调用CSharpCodeProvider就可以实现了: string prefix = "using System;"+ "public static class Test{"+ "public static void Run(){"; string po

nginx php动态编译加载模块.

#Nginx动态编译加载模块步骤 #查看目前Nginx版本及编译模块 #[[email protected] ~]# /opt/app/lnmp/nginx-1.12.0/sbin/nginx -V #nginx version: nginx/1.12.0 #built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) #built with OpenSSL 1.0.2k  26 Jan 2017 #TLS SNI support enabled #c

浅谈VB.Net 程序的编译和动态编译

---恢复内容开始--- 一般,我们都是通过Visual Studio(下面简称vs)来编写和编译vb.net应用程序的,但是,不少的人并不知道vs是通过何种方式编译程序的.今天,我们就来探讨一下编译vb.net程序的真正原理. 这篇随笔包含如下几个部分: 1.VS是怎么编译的 2.通过vbc.exe来编译应用程序 3.在代码中通过VBCodeProvider动态编译应用程序 ok,首先来说说vs编译应用程序的方法.其实,vs是通过调用vbc.exe来编译vbnet应用程序的.vs把用户编写的代

动态编译添加php模块

注意:转载请注明出处:http://www.programfish.com/blog/?p=85 在很多时候我们用linux里搭建web服务器的时候会需要编译安装php套件,而在编译安装后可能又会需要添加一些编译安装时没有指定要编译进去的模块,例如如下情况: mysql.so 或mysqli.so .mbstring.so  zlib.so 等模块. 这里提示一下: 如果你有安装过phpmyadmin而且在安装配置好之后打开首页是空白的,那么很有可能就是你的php没有mysql和mbstring

Apache静态编译与动态编译区别

静态编译: 在编译时,已经把相关模块编译进httpd二进制文件中不用再 httpd.conf 中在 LoadModule 来加载,只要在  <ifmodule></ifmodule> 中来配置就可以了. 动态编译: 编译的时候,使用 enable-module=shared  或者 enable-modules-shared=module 来动态编译. 动态显然就不编译到httpd里面去了,启动的时候根本不会加载这个模块, 而是给你一个 module.so  文件.你想用,就在ht

反射已经&quot;Out&quot;,动态编译才能&quot;Hold&quot;住

Net支持反射功能以后,确实使我们Net程序眼前一亮啊,真是太神奇了,只需要传入字符串就可以完成功能.可以说,反射功能的引入,使我们在处理某些问题上更加得心应手. 传统的Db管理软件中,数据库字段的频繁改动,前台实体类的不断修改,使我们大为头痛.并不是说我们设计的Db结构不合理,而且客户的需求变动十分频繁,而且非常不可控,当然,如果对行业业务非常精通的话,是可以避免这个问题的. 使用反射功能,虽然可以传入字符串来解决某些问题,但如果遇到上述提到的数据库字段增删的问题,我们常用的方法是写入给客户升

gcc 动态编译 动态库路径

gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [[email protected] shared]# cat add.cint add (int x, int y) {return x + y;} Parsed in 0.007 seconds at 12.13 KB/sadd.c 求和函数 代码如下: [[email protected] shared]# cat print.

java内存动态编译执行

1.package org.jui.core.dynamic; public class DynaCompTest { public static void main(String[] args) throws Exception { String fullName = "DynaClass"; StringBuilder src = new StringBuilder(); src.append("public class DynaClass {\n"); src