Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.53 KB | None | 0 0
  1.        private Assembly CompileCode(string code)
  2.         {
  3.             var syntaxTree = CSharpSyntaxTree.ParseText(code);
  4.  
  5.             string assemblyName = Path.GetRandomFileName();
  6.             var references = new MetadataReference[]
  7.             {
  8.                 MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
  9.  
  10.                 MetadataReference.CreateFromFile(typeof(System.ComponentModel.Component).Assembly.Location),
  11.                 MetadataReference.CreateFromFile(typeof(System.Linq.Enumerable).Assembly.Location),
  12.                 MetadataReference.CreateFromFile(typeof(System.Windows.Forms.Form).Assembly.Location),
  13.  
  14.                 MetadataReference.CreateFromFile(typeof(System.Threading.Tasks.Task).Assembly.Location),
  15.  
  16.                 MetadataReference.CreateFromFile(typeof(CefSharp.Cef).Assembly.Location),
  17.                 MetadataReference.CreateFromFile(typeof(CefSharp.WinForms.ChromiumWebBrowser).Assembly.Location),
  18.  
  19.                 MetadataReference.CreateFromFile(typeof(Newtonsoft.Json.JsonConvert).Assembly.Location),
  20.                 MetadataReference.CreateFromFile(typeof(NLog.Logger).Assembly.Location),
  21.  
  22.                 MetadataReference.CreateFromFile(typeof(Page_Watch.Browser.BrowserCommunications).Assembly.Location),
  23.                 MetadataReference.CreateFromFile(typeof(Site_Automation_Generator.Browser.BrowserExtensions).Assembly.Location)
  24.             };
  25.  
  26.             var compilation = CSharpCompilation.Create(
  27.                 assemblyName,
  28.                 syntaxTrees: new[] { syntaxTree },
  29.                 references: references,
  30.                 options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
  31.  
  32.             using (var ms = new MemoryStream())
  33.             {
  34.                 var result = compilation.Emit(ms);
  35.  
  36.                 if (!result.Success)
  37.                 {
  38.                     IEnumerable<Diagnostic> failures = result.Diagnostics.Where(diagnostic =>
  39.                         diagnostic.IsWarningAsError ||
  40.                         diagnostic.Severity == DiagnosticSeverity.Error);
  41.  
  42.                     foreach (Diagnostic diagnostic in failures)
  43.                     {
  44.                         Console.Error.WriteLine("{0}: {1}", diagnostic.Id, diagnostic.GetMessage());
  45.                     }
  46.                 }
  47.                 else
  48.                 {
  49.                     ms.Seek(0, SeekOrigin.Begin);
  50.                     Assembly assembly = Assembly.Load(ms.ToArray());
  51.                     return assembly;
  52.                 }
  53.             }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement