Code als String ausführen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Code als String ausführen

    Hallo Zusammen,

    ich komme einfach nicht mehr weiter und dachte ich frage die Profis.
    In dem Forum habe ich schon gesehen das einige Themen zu Codedome besprochen worden sind.

    Habe einen Code den ich so verwenden und anpassen wollte der aber immer Fehler bringt "System.PlatformNotSupportedException: "Operation is not supported on this platform."

    Könntet Ihr mir bitte helfen.

    VB.NET-Quellcode

    1. Public Interface IScript
    2. Property Variable1 As String
    3. Sub DoWork()
    4. End Interface
    5. Public Function GenerateScript(code As String) As IScript
    6. Using provider As New VBCodeProvider()
    7. Dim parameters As New CompilerParameters()
    8. parameters.GenerateInMemory = True
    9. parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location)
    10. Dim interfaceNamespace As String = GetType(IScript).Namespace
    11. Dim codeArray() As String = New String() {"Imports " & interfaceNamespace & Environment.NewLine & code}
    12. Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, codeArray)
    13. If results.Errors.HasErrors Then
    14. Throw New Exception("Failed to compile script")
    15. Else
    16. Return CType(results.CompiledAssembly.CreateInstance("Script"), IScript)
    17. End If
    18. End Using
    19. End Function
    20. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    21. Dim builder As New StringBuilder()
    22. builder.AppendLine("Public Class Script")
    23. builder.AppendLine(" Implements IScript")
    24. builder.AppendLine(" Public Property Variable1 As String Implements IScript.Variable1")
    25. builder.AppendLine(" Public Sub DoWork() Implements IScript.DoWork")
    26. builder.AppendLine(" Variable1 = ""Hello World""")
    27. builder.AppendLine(" End Sub")
    28. builder.AppendLine("End Class")
    29. 'MsgBox(builder.ToString)
    30. Dim script As IScript = GenerateScript(builder.ToString())
    31. script.DoWork()
    32. MessageBox.Show(script.Variable1
    33. End Sub



    Vielen Dank

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @TBSOG Willkommen im Forum. :thumbup:
    Ich habe Deinen Code in eine WinForm-App eingefügt, Framework 4.8.
    Nachdem ich das Interface direkt in den Namespace verschoben hatte, lief Dein Code sofort:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.CodeDom.Compiler
    2. Imports System.Reflection
    3. Imports System.Text
    4. Public Class Form1
    5. Public Function GenerateScript(code As String) As IScript
    6. Using provider As New VBCodeProvider()
    7. Dim parameters As New CompilerParameters()
    8. parameters.GenerateInMemory = True
    9. parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location)
    10. Dim interfaceNamespace As String = GetType(IScript).Namespace
    11. Dim codeArray() As String = New String() {"Imports " & interfaceNamespace & Environment.NewLine & code}
    12. Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, codeArray)
    13. If results.Errors.HasErrors Then
    14. Throw New Exception("Failed to compile script")
    15. Else
    16. Return CType(results.CompiledAssembly.CreateInstance("Script"), IScript)
    17. End If
    18. End Using
    19. End Function
    20. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    21. Dim builder As New StringBuilder()
    22. builder.AppendLine("Public Class Script")
    23. builder.AppendLine(" Implements IScript")
    24. builder.AppendLine(" Public Property Variable1 As String Implements IScript.Variable1")
    25. builder.AppendLine(" Public Sub DoWork() Implements IScript.DoWork")
    26. builder.AppendLine(" Variable1 = ""Hello World""")
    27. builder.AppendLine(" End Sub")
    28. builder.AppendLine("End Class")
    29. 'MsgBox(builder.ToString)
    30. Dim script As IScript = GenerateScript(builder.ToString())
    31. script.DoWork()
    32. MessageBox.Show(script.Variable1)
    33. End Sub
    34. End Class
    35. Public Interface IScript
    36. Property Variable1 As String
    37. Sub DoWork()
    38. End Interface

    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    TBSOG schrieb:

    Was meinst du mit:
    Das Interface liegt nicht in einer weiteren Klasse.
    Sieh Dir meinen Code an.
    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!