动态源代码生成和编译

C#javaC++开源通信 C#javaC++开源通信     2022-08-20     133

关键词:

.NET Framework 中包含一个名为“代码文档对象模型”(CodeDOM) 的机制,该机制使编写源代码的程序的开发人员可以在运行时,根据表示所呈现代码的单一模型,用多种编程语言生成源代码。    

为表示源代码,CodeDOM 元素相互链接以形成一个数据结构(称为 CodeDOM 图),它以某种源代码的结构为模型。    

System.CodeDom 命名空间定义可表示源代码逻辑结构(与具体的编程语言无关)的类型。  System.CodeDom.Compiler 命名空间定义从 CodeDOM 图生成源代码的类型,以及在受支持的语言中管理源代码编译的类型。  编译器供应商或开发人员可以扩展受支持语言的集合。 

当程序需要用多种语言为程序模型或者为不确定的目标语言生成源代码时,与语言无关的源代码建模很有价值。  例如,如果语言的 CodeDOM 支持可用,则一些设计器将 CodeDOM 用作语言抽象接口,以用正确的编程语言生成源代码。 

.NET Framework 中包含 C#JScriptVisual Basic 的代码生成器和代码编译器。    

本节内容

使用 CodeDOM

介绍一般用途并演示如何使用 CodeDOM 生成简单的对象图。          

生成源代码和在 CodeDOM 图中编译程序

介绍如何使用 System.CodeDom.Compiler 命名空间中定义的类来生成源代码并使用外部编译器编译所生成的代码。          

如何:使用 CodeDOM 创建 XML 文档文件

描述了如何使用 CodeDOM 生成包含 XML 文档注释的代码,以及如何编译生成的代码,方可创建 XML 文档输出。          

如何:使用 CodeDOM 创建类

描述了如何使用 CodeDOM 生成包含字段、属性、方法、构造函数和入口点的类。          

参考

System.CodeDom

定义在面向公共语言运行时的编程语言中表示代码元素的元素。          

System.CodeDom.Compiler

定义在运行时生成和编译代码的接口。          

相关章节

CodeDOM Quick Reference

为开发人员提供查找表示源代码元素的 CodeDOM 元素的快捷方法。

静态库和动态库的生成和编译(代码片段)

静态库和动态库的生成和编译静态库头文件应该与源代码文件放在同一目录下,或者使用-I选项指定头文件的路径。在编译源代码文件时,应该使用-I选项指定头文件的路径。例如:g++-cmyfile.cpp-omyfile.o-I./include上... 查看详情

利用gcc编译器生成动态链接库和静态链接库

...程gcc–shared–olibxxx.soxxx.o经过编译链接就可以生成动态链接库,其扩展名为.soEg.还可以gcc&n 查看详情

程序动态编译代码

c#可以在程序运行过程中动态的编译代码,并生成程序集加载在内存,然后就可以动态的调用代码生成的程序了,这有点像我们的vs编译器,感兴趣的可以制作属于自己的c#编译器:要实现这种功能,我们只需要调用CSharpCodeProvider... 查看详情

qt程序部署

静态编译和动态编译的区别:1:静态编译:最终生成一个exe文件,直接复制到其他电脑上就可以运行。2:动态编译:生成的exe需要一堆dll运行环境。静态编译和动态编译的优缺点:1:静态编译:生成的文件较大,但是自带运行... 查看详情

g++编译动态链接库和静态链接库

现在我有hello1.cpp和hello2.cpp两个文件,现在我要生成动态链接库libhello.so和静态链接库libhello.a。以下为步骤:1.生成动态链接库:g++-m32hello1.cpphello2.cpp-fPIC-shared-o../lib/linux32/libhello.so-m32为生成32位的动态链接库,-m64位生成64位的动... 查看详情

gcc编译过程与动态链接库和静态链接库(代码片段)

...g++-chellospeak.cpp会将hellospeak.cpp选项-c用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。文件默认名与源码文件名相同,只是将其后缀变为.o。例如,上面的命令将编译源码文件hellospeak.cpp并生成对象文件hellospeak.o... 查看详情

编译型语言解释型语言静态类型语言动态类型语言概念与区别

...言和解释型语言1、编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库... 查看详情

计算机科学基础知识动态库和位置无关代码

一、前言本文主要描述了动态库以及和动态库有紧密联系的位置无关代码的相关资讯。首先介绍了动态库和位置无关代码的源由,了解这些背景知识有助于理解和学习动态库。随后,我们通过加-fPIC和不加这个编译选项分别编译... 查看详情

gcc编译使用动态链接库和静态链接库(代码片段)

1库的分类根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。有别于静态... 查看详情

编译型语言,解释型语言,静态语言,动态语言概念

...言和解释语言1、编译语言:需要通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译,链接两个步骤:编译:把原代码编译成机器码链接:把各个模块和依赖库串起来生成可执行文件。优点:编... 查看详情

编译型语言解释型语言静态类型语言动态类型语言概念与区别

...言和解释型语言1、编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库... 查看详情

asm与presto动态代码生成简介

...k中,代码生成其实就是在SQL运行的时候根据相关算子动态拼接Java代码,然后使用Janino来动态编译生成相关的Java字节码并加载到相关 查看详情

asm与presto动态代码生成简介

...k中,代码生成其实就是在SQL运行的时候根据相关算子动态拼接Java代码,然后使用Janino来动态编译生成相关的Java字节码并加载到相关 查看详情

qt编译生成的exe无法执行

...在netbeans下生成的exe还是gvim下编译的版本都不能够运行,源代码完全没有问题,是标准的helloworld代码,即使全部是空代码也完全无法运行,我是不是编译生成的可执行文件不是windows的运行文件?但是确实是g++编译生成的,如果... 查看详情

aop是啥意思?

...amming的缩写,是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。AOP的出现弥补... 查看详情

abstractprocessor:利用注解动态生成代码

按照处理时期,注解分为两种类型,一种是运行时注解,另一种是编译时注解。编译时注解的核心依赖APT(AnnotationProcessingTools)实现,对应的处理流程为:在某些代码元素上(如类型、函数、字段等)添... 查看详情

natasha入门(代码片段)

什么是NatashaNatasha是基于Roslyn的动态程序构架库,说的直白一点就是将一个或多个cs文件进行动态编译并放入到正在运行的程序中去。例如我们有一个设备库,设备库中的设备会不定期的更新,那我们只需要将平台(展示和调用... 查看详情

编译型语言解释型语言静态类型语言动态类型语言概念与区别

...言和解释型语言1、编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库... 查看详情