CompileHelper.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. #if CROSSPLATFORM || COREWIN
  3. using FastReport.Code.CodeDom.Compiler;
  4. using FastReport.Code.CSharp;
  5. #else
  6. using System.CodeDom.Compiler;
  7. using Microsoft.CSharp;
  8. #endif
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Reflection;
  12. using System.Text;
  13. namespace FastReport.Utils
  14. {
  15. /// <summary>
  16. /// Class helper for compile source code with path of assemblies
  17. /// </summary>
  18. public static class CompileHelper
  19. {
  20. /// <summary>
  21. /// Generate a assembly in memory with some source code and several path for additional assemblies
  22. /// </summary>
  23. /// <param name="sourceCode"></param>
  24. /// <param name="assemblyPaths"></param>
  25. /// <returns></returns>
  26. public static Assembly GenerateAssemblyInMemory(string sourceCode, params string[] assemblyPaths)
  27. {
  28. using (CSharpCodeProvider compiler = new CSharpCodeProvider())
  29. {
  30. CompilerParameters parameters = new CompilerParameters();
  31. parameters.GenerateInMemory = true;
  32. foreach (string asm in assemblyPaths)
  33. {
  34. parameters.ReferencedAssemblies.Add(asm);
  35. }
  36. #if CROSSPLATFORM || COREWIN
  37. var mscorPath = compiler.GetReference("System.Private.CoreLib.dll").Display;
  38. parameters.ReferencedAssemblies.Add(mscorPath);
  39. #endif
  40. CompilerResults results = compiler.CompileAssemblyFromSource(parameters, sourceCode);
  41. return results.CompiledAssembly;
  42. }
  43. }
  44. }
  45. }