2017-10-21 90 views
0
安慰

我用下面的編譯C#在運行時:如何抓住什麼是寫有CSharpCodeProvider

CompilerParameters parameters = new CompilerParameters 
     { 
      GenerateInMemory = true, 
      GenerateExecutable = true, 
      IncludeDebugInformation = true 
     }; 


     // True - memory generation, false - external file generation 
     // True - exe file generation, false - dll file generation 

     var res = pro.CompileAssemblyFromSource(parameters, 
      code); 

     Assembly assembly = res.CompiledAssembly; 
     Type program = assembly.GetType("First.Program"); 
     MethodInfo main = program.GetMethod("Main"); 
     var invoke = main?.Invoke(null, null); 

res.Output是一個空列表,如果代碼中有Console.WriteLine(),它被寫入主應用程序的控制檯但是,我想抓住寫的東西。

回答

0

您還應該檢查res.Errors。如果有錯誤,那麼他們將會在那裏。如果ErrorsOutput都是空的,那麼您可能已經成功編譯而沒有任何輸出。檢查:cr.NativeCompilerReturnValue.ToString()

+0

沒有錯誤,它寫入父應用程序的調試,但我想取而代之。 –

+0

@TalhaTalipAçıkgöz不知道會導致什麼。您可以使用一個調試偵聽器:https://msdn.microsoft.com/en-us/library/system.diagnostics.debug.listeners(v=vs.110).aspx – AaronLS

+0

我會看看,但我認爲那裏應該是更好的方法。 –