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相关推荐

  1. 关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

    关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.C ...

  2. 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入

    用记事本打开专案资料夹里的 *.csproj 找到<ItemGroup>区段 手动加入 <Reference Include="Microsoft.CSharp" ...

  3. 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?...

    提示"找不到编译动态表达式所需的一种或多种类型.是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? "错误 解决方法:   将引入的 ...

  4. Microsoft.CSharp.dll程序集的作用

    <C#与.NET 4高级程序设计:第5版>第18章动态类型和动态语言运行时,本章,我们将学习dynamic关键字的方方面面,理解如何使用DLR (Dynamic Language Runt ...

  5. CS0656 缺少编译器要求的成员“Microsoft.CSharp..........

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS0656 缺少编译器要求的成员"Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo ...

  6. Microsoft.CSharp.targets不存在解决方法

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 经过实践,这个需要修改一 ...

  7. 使用C# 3.0编译器编译 Asp.Net 项目代码

    只需要在 web.config 里添加这样的一段设置就OK了: <configuration>      <system.codedom>     <compilers& ...

  8. 基於IIS的WCF的分布式多層架構開發實現

    曾用.NET Remoting,基於IIS,為公司實現過分布式多層架構,客戶端采用Web Browser瀏覽,當時,公司領導告訴我可能會有多臺中間服務器用於系統,又不想每臺電腦的去安裝程序,所以,我最 ...

  9. 【090723】动态调用webservice

    [摘自互联网] Code using System; using System.Data; using System.Configuration; using System.Web; using Sy ...

最新文章

  1. 第1章、蓄势待发准备篇
  2. Flink随笔(1)
  3. SQL Server 将一个表中字段的值复制到另一个表的字段中
  4. a5d2 phy驱动
  5. mysql定时作业_mysql 让一个存储过程定时作业的代码(转)
  6. 波卡生态项目Polkalokr将在Polkastarter进行IDO
  7. 停止标记NYOJ 一个简单的数学题 南工330停止标记
  8. python爬虫+谷歌翻译json字符串
  9. MySQL数据库字段级权限设计
  10. 移动端旅游电商靠什么吸引了金主?
  11. JavaScript--点击颜色,为主题更换背景颜色
  12. CSS设置图像的透明度
  13. Mentor Graphics ModelSim SE 10.5官方原版+完美破解
  14. android 仿QQ登陆界面实现
  15. sql 如果不存在则插入,存在则不操作或修改
  16. C++自制打印正方形小游戏
  17. BB10 处理NFC事件
  18. 18000-6c协议阅读笔记
  19. 数字电路实验(06)555定时器及其应用:多谐振荡器
  20. 形状相似的物品_找身边与图形相似的事物

热门文章

  1. 【赠书】pandas创始人手把手教你利用Python进行数据分析
  2. 【行业进展】哪些公司在搞“新零售”了
  3. 全球及中国病人多参数监护仪行业动态研究与运营风险评估报告2022版
  4. 中国组合聚醚市场十四五发展规划与未来竞争趋势分析报告2022-2028年版
  5. 工作中常用的linux命令,工作中常用的Linux命令
  6. 发展农业对话国际农民丰收节贸易会 菲律宾学中国还是印度?
  7. 特征抽取--标签与索引的转化: IndexToString
  8. 关于java和c语言中,变量重名问题
  9. 【python】-socketServer
  10. MySQL slave_exec_mode 参数说明