Codedom Compiler Syntax Error C#

  • C#

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    Codedom Compiler Syntax Error C#

    Hey Leute ich bastel grad bisschen mit der Codedom Klasse rum.

    Allerdings stoß ich auf ein kleines Problem.

    Der Compiler sagt mir bei dieser Stelle

    C-Quellcode

    1. th_load = new Thread(() => load(team));

    das des "=>" ein Fehler ist 8|

    Das ist die Meldung: Ungültiger Ausdruck >.


    Ich hab kp, was das soll.
    Hab schon die Einstellungen von Codedom alle ziemlich getestet. Aber änden tut sich da nix.


    Hab jetzt auch andere Sachen getestet die ein "=>" enthalten. Immer das gleiche.

    Im Netz finde ich nix, weiß auch nicht sorecht wonach ich suchen soll.

    n1nja schrieb:

    ein Fehler
    Wahrscheinlich lässt Du nur diese Zeile compilieren, Du musst aber eine ganze Klasse compilieren lassen.
    Teste dies (funktioniert):
    Spoiler anzeigen

    C#-Quellcode

    1. // Aufruf des CodeDom-Compilers
    2. private void button1_Click(object sender, EventArgs e)
    3. {
    4. // Pfad zur Datei, die zu compilieren ist
    5. string txt = System.IO.File.ReadAllText(@"C:\Temp\CodeDomTest.cs"); // Testdatei
    6. string res = "";
    7. Parser.TryParseClass(txt, ref res);
    8. this.richTextBox1.AppendText(res + "\n");
    9. }

    C#-Quellcode

    1. // Klasse mit dem CodeDom-Compiler-Aufruf
    2. using Microsoft.CSharp;
    3. using System;
    4. using System.CodeDom.Compiler;
    5. using System.Reflection;
    6. namespace WindowsFormsApplication1
    7. {
    8. public class Parser
    9. {
    10. public static bool TryParseClass(string classCode, ref string res)
    11. {
    12. CSharpCodeProvider provider = new CSharpCodeProvider();
    13. // Create a new CSharp Code Compiler
    14. CompilerParameters cp = new CompilerParameters();
    15. // Create a new Compiler parameter object.
    16. cp.GenerateExecutable = false;
    17. // Don't create an object on disk
    18. cp.GenerateInMemory = true;
    19. // But do create one in memory.
    20. //See C# CodeBank example for explanation of why it was used.
    21. // Create a compiler output results object and compile the source code.
    22. CompilerResults cr = provider.CompileAssemblyFromSource(cp, classCode);
    23. if (cr.Errors.Count > 0)
    24. {
    25. //If the expression passed is invalid or "", the compiler will generate errors.
    26. return false;
    27. }
    28. //Find our Evaluate method.
    29. MethodInfo methInfo = cr.CompiledAssembly.GetType("ns.TestClass").GetMethod("Evaluate");
    30. //Invoke it on nothing, so that we can get the return value
    31. res = Convert.ToString(methInfo.Invoke(null, null));
    32. return true;
    33. }
    34. }
    35. }

    C#-Quellcode

    1. // zu compilierender Code
    2. using System.Threading;
    3. namespace ns
    4. {
    5. public class TestClass
    6. {
    7. public static string Evaluate()
    8. {
    9. int team = 4;
    10. Thread th_load = new Thread(() => load(team));
    11. System.IO.File.WriteAllText(@"c:\Temp\CodeDomTest.txt", "bla");
    12. return System.IO.File.ReadAllText(@"c:\Temp\CodeDomTest.txt");
    13. }
    14. private static void load(int x)
    15. {
    16. }
    17. }
    18. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So bin jetzt mal wieder online.
    Viel Stress die letzten Tage.

    Ich hab jetzt mein Code so umgebaut, aber der Fehler kommt nach wie vor.
    Vllt liegt es daran, das ich eine Executable erzeuge und den Code nicht aus den Ram starte.

    Ich will per Code eine Forms Anwendung erzeugen.

    n1nja schrieb:

    Ich will per Code eine Forms Anwendung erzeugen.
    Kannst Du mal das ganze Projekt zippen und anhängen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja werd ich heut Abend machen, sobald ich von der Arbeit zu Hause bin. Hab noch eine Idee, was es sein könnte.
    Werd ich dann mal testen.

    Soviel ich weis, kann man auch so schreiben:

    C-Quellcode

    1. Thread t = new Thread(delegate() { loadvoid(int1, int2); });


    Ist mir gerade so eingefallen, kann es aber nicht testen.