Microsoft.CSharp.CSharpCodeProvider
Microsoft.CSharp.CSharpCodeProvider
MSDN
提供对 C# 代码生成器和代码编译器的实例的访问。类提供可用来检索 C# ICodeGenerator 和 ICodeCompiler 实现的实例的方法。
下面的示例使用 C# 或 Visual Basic 代码提供程序编译源文件。该示例检查输入文件扩展名并使用相应的 CSharpCodeProvider 或 VBCodeProvider 进行编译。输入文件被编译为可执行文件,并会在控制台上显示所有编译错误。
public static bool CompileExecutable(String sourceName) {FileInfo sourceFile = new FileInfo(sourceName);CodeDomProvider provider = null;bool compileOk = false;// Select the code provider based on the input file extension.if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS"){provider = new Microsoft.CSharp.CSharpCodeProvider();}else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB"){provider = new Microsoft.VisualBasic.VBCodeProvider();}else {Console.WriteLine("Source file must have a .cs or .vb extension");}if (provider != null){// Format the executable file name.// Build the output assembly path using the current directory// and <source>_cs.exe or <source>_vb.exe. String exeName = String.Format(@"{0}\{1}.exe", System.Environment.CurrentDirectory, sourceFile.Name.Replace(".", "_"));CompilerParameters cp = new CompilerParameters();// Generate an executable instead of // a class library.cp.GenerateExecutable = true;// Specify the assembly file name to generate.cp.OutputAssembly = exeName;// Save the assembly as a physical file.cp.GenerateInMemory = false;// Set whether to treat all warnings as errors.cp.TreatWarningsAsErrors = false;// Invoke compilation of the source file.CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceName);if(cr.Errors.Count > 0){// Display compilation errors.Console.WriteLine("Errors building {0} into {1}", sourceName, cr.PathToAssembly);foreach(CompilerError ce in cr.Errors){Console.WriteLine(" {0}", ce.ToString());Console.WriteLine();}}else{// Display a successful compilation message.Console.WriteLine("Source {0} built into {1} successfully.",sourceName, cr.PathToAssembly);}// Return the results of the compilation.if (cr.Errors.Count > 0){compileOk = false;}else {compileOk = true;}}return compileOk; }
以下文档可供参考:
.NET中的动态编译
动态源代码生成和编译(MSDN)
生成源代码和在 CodeDOM 图中编译程序(MSDN)
一些重要的信息如下:
使用 CodeDOM 代码提供程序编译程序集
调用编译
若要使用 CodeDom 提供程序编译程序集,必须有要用某种有编译器的语言编译的源代码,或者有 CodeDOM 图(可用来生成要编译的源代码)。
如果从 CodeDOM 图进行编译,请将包含该图的 CodeCompileUnit 传递给代码提供程序的 CompileAssemblyFromDom 方法。如果您具有使用编译器可以理解的语言编写的源代码文件,请将包含源代码的文件的名称传递给 CodeDom 提供程序的 CompileAssemblyFromFile 方法。也可以将包含用编译器识别的语言编写的源代码的字符串传递给 CodeDom 提供程序的CompileAssemblyFromSource 方法。
配置编译参数
CodeDom 提供程序的所有标准编译调用方法都有一个 CompilerParameters 类型的参数,该参数指示用于编译的选项。
可以在 CompilerParameters 的 OutputAssembly 属性中指定输出程序集的文件名。否则,将使用默认的输出文件名。
默认情况下,新的 CompilerParameters 在初始化时,其 GenerateExecutable 属性被设置为 false。如果编译可执行程序,必须将 GenerateExecutable 属性设置为 true。当GenerateExecutable 设置为 false 时,编译器将生成一个类库。
如果从 CodeDOM 图编译可执行程序,必须在图中定义一个 CodeEntryPointMethod。如果有多个代码入口点,可能需要将 CompilerParameters 的 MainClass 属性设置为定义要使用的入口点的类名。
要将调试信息包含在生成的可执行程序中,请将 IncludeDebugInformation 属性设置为 true。
如果您的项目引用了任何程序集,必须将作为 StringCollection 中的项的程序集名称指定为调用编译时使用的 CompilerParameters 的 ReferencedAssemblies 属性。
通过将 GenerateInMemory 属性设置为 true,可以编译写入内存而不是磁盘的程序集。当在内存中生成程序集时,代码可从 CompilerResults 的 CompiledAssembly 属性中获取生成的程序集的引用。如果将程序集写入磁盘,可从 CompilerResults 的 PathToAssembly 属性中获取生成的程序集的路径。
要指定在调用编译进程时使用的自定义命令行参数字符串,请在 CompilerOptions 属性中设置该字符串。
如果调用编译器进程时必须使用 Win32 安全标记,请在 UserToken 属性中指定该标记。
要将 Win32 资源文件链接到编译的程序集中,请在 Win32Resource 属性中指定 Win32 资源文件的名称。
要指定暂停编译的警告等级,请将 WarningLevel 属性设置为一个表示暂停编译的警告等级的整数。也可以通过将 TreatWarningsAsErrors 属性设置为 true,配置编译器在遇到警告时暂停编译。
Microsoft.CSharp.CSharpCodeProvider相关推荐
- 关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.C ...
- 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
用记事本打开专案资料夹里的 *.csproj 找到<ItemGroup>区段 手动加入 <Reference Include="Microsoft.CSharp" ...
- 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?...
提示"找不到编译动态表达式所需的一种或多种类型.是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? "错误 解决方法: 将引入的 ...
- Microsoft.CSharp.dll程序集的作用
<C#与.NET 4高级程序设计:第5版>第18章动态类型和动态语言运行时,本章,我们将学习dynamic关键字的方方面面,理解如何使用DLR (Dynamic Language Runt ...
- CS0656 缺少编译器要求的成员“Microsoft.CSharp..........
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS0656 缺少编译器要求的成员"Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo ...
- Microsoft.CSharp.targets不存在解决方法
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 经过实践,这个需要修改一 ...
- 使用C# 3.0编译器编译 Asp.Net 项目代码
只需要在 web.config 里添加这样的一段设置就OK了: <configuration> <system.codedom> <compilers& ...
- 基於IIS的WCF的分布式多層架構開發實現
曾用.NET Remoting,基於IIS,為公司實現過分布式多層架構,客戶端采用Web Browser瀏覽,當時,公司領導告訴我可能會有多臺中間服務器用於系統,又不想每臺電腦的去安裝程序,所以,我最 ...
- 【090723】动态调用webservice
[摘自互联网] Code using System; using System.Data; using System.Configuration; using System.Web; using Sy ...
最新文章
- 第1章、蓄势待发准备篇
- Flink随笔(1)
- SQL Server 将一个表中字段的值复制到另一个表的字段中
- a5d2 phy驱动
- mysql定时作业_mysql 让一个存储过程定时作业的代码(转)
- 波卡生态项目Polkalokr将在Polkastarter进行IDO
- 停止标记NYOJ 一个简单的数学题 南工330停止标记
- python爬虫+谷歌翻译json字符串
- MySQL数据库字段级权限设计
- 移动端旅游电商靠什么吸引了金主?
- JavaScript--点击颜色,为主题更换背景颜色
- CSS设置图像的透明度
- Mentor Graphics ModelSim SE 10.5官方原版+完美破解
- android 仿QQ登陆界面实现
- sql 如果不存在则插入,存在则不操作或修改
- C++自制打印正方形小游戏
- BB10 处理NFC事件
- 18000-6c协议阅读笔记
- 数字电路实验(06)555定时器及其应用:多谐振荡器
- 形状相似的物品_找身边与图形相似的事物
热门文章
- 【赠书】pandas创始人手把手教你利用Python进行数据分析
- 【行业进展】哪些公司在搞“新零售”了
- 全球及中国病人多参数监护仪行业动态研究与运营风险评估报告2022版
- 中国组合聚醚市场十四五发展规划与未来竞争趋势分析报告2022-2028年版
- 工作中常用的linux命令,工作中常用的Linux命令
- 发展农业对话国际农民丰收节贸易会 菲律宾学中国还是印度?
- 特征抽取--标签与索引的转化: IndexToString
- 关于java和c语言中,变量重名问题
- 【python】-socketServer
- MySQL slave_exec_mode 参数说明