Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1
    Capt'n Crunch
    Registriert seit
    10.07.2008
    Beiträge
    999

    Standard Compile VB.NET "onthefly"

    Halli Hallo,
    hab jetzt leider ein größeres Problem.
    Ich möchte eine art Builder für mein Server schreiben. Hab auch eine Function in VB.Net die eine .exe aus nem string generiert.
    leider schaffe ich es aber nicht aus meinem gültigen vb.net code ne exe zu bekommen:
    Code:
     Public Function Compile(ByVal v_Source As String) As System.CodeDom.Compiler.CompilerResults
    
            Dim provider As Microsoft.VisualBasic.VBCodeProvider
            Dim compiler As System.CodeDom.Compiler.ICodeCompiler
            Dim params As System.CodeDom.Compiler.CompilerParameters
            Dim results As System.CodeDom.Compiler.CompilerResults
    
            params = New System.CodeDom.Compiler.CompilerParameters
            params.GenerateInMemory = True      'Assembly is created in memory
    
            params.TreatWarningsAsErrors = False
            params.WarningLevel = 4
            'Put any references you need here - even you own dll's, if you want to use one
    
            Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll"}
            params.ReferencedAssemblies.AddRange(refs)
            params.GenerateExecutable = True
    
            Try
                provider = New Microsoft.VisualBasic.VBCodeProvider
                compiler = provider.CreateCompiler
                results = compiler.CompileAssemblyFromSource(params, v_Source)
                Return results
            Catch ex As Exception
                'Compile errors don't throw exceptions; you've got some deeper problem...
    
                MessageBox.Show(ex.Message)
                Return Nothing
            End Try
        End Function
    
    
    End Class
    aber selbst an den "simpelsten" programm scheitere ich:
    Code:
            strb = "Public Class Form1 " & vbNewLine
            strb &= "Public Shared Sub Main()" & vbNewLine
            strb &= "MessageBox.Show()" & vbNewLine
            strb &= "End Sub" & vbNewLine
            strb &= "End Class" & vbNewLine
    
            Debug.WriteLine(strb)
    
            Dim cr As System.CodeDom.Compiler.CompilerResults = Compile(strb)
    --> Der Name MessageBox wurde nicht deklariert.
    Muss ich irgendwie ne dll von visual basic.net einbinden?
    wie funktioniert das mit labels etc? woher weis der compiler wo die liegen sollen?
    bitte um hilfe :-/
    bitcoin. Banking Is Necessary. Banks Are Not. - by Lincoln6Echo

    Das ganze Mysql usw is mir zu viel arbeit um es zu lernen

  2. #2
    nichtsnutz
    Registriert seit
    13.07.2008
    Beiträge
    711

    Standard

    Versuch mal msgbox(ex.Message)
    ...und dann hat er mit seinem sperma ne linie auf meine stirn gemalt und KellerKind geflüstert!

  3. #3
    Capt'n Crunch Avatar von hackerking
    Registriert seit
    08.11.2008
    Beiträge
    964

    Standard

    Dass liegt daran, dass MessageBox im Namespace System.Windows.Forms (oder so) ist, und diese Datei wird nicht importiert, wenn du so kompilierst.

  4. #4
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    versuchs mal mit msgbox()

  5. #5
    Fortgeschrittener
    Registriert seit
    26.11.2007
    Beiträge
    37

    Standard

    Code:
    Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll"}
    zu >

    Code:
    Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll", "System.Windows.Forms.dll"}
    Code:
    params.GenerateInMemory = True
    Wieso solltest du es in Memory laden? Brauchst du nicht kannst du auch auf False setzen.

  6. #6
    Capt'n Crunch
    Registriert seit
    10.07.2008
    Beiträge
    999

    Standard

    Zitat Zitat von alexanderjanjic Beitrag anzeigen
    Code:
    Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll"}
    zu >

    Code:
    Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll", "System.Windows.Forms.dll"}
    Code:
    params.GenerateInMemory = True
    Wieso solltest du es in Memory laden? Brauchst du nicht kannst du auch auf False setzen.
    danke.
    woher weis ich jetzt welch dll´s Visual-Studio von haus aus immer mit "importiert"?

    sind das nur die 3?
    bitcoin. Banking Is Necessary. Banks Are Not. - by Lincoln6Echo

    Das ganze Mysql usw is mir zu viel arbeit um es zu lernen

  7. #7
    Fortgeschrittener
    Registriert seit
    26.11.2007
    Beiträge
    37

    Standard

    My Project > References

    Die du da siehst sind vom Anfang an dabei obwohl man nicht alle braucht z.b. Wenn du nicht mit XML arbeitest brauchst du kein System.Xml.dll

  8. #8
    W32.SwineFlu Avatar von Sirect
    Registriert seit
    24.07.2008
    Beiträge
    1.916

    Standard

    Code:
    Public Class Form1
        Private Sub Button1_Click() Handles Button1.Click
            Dim code As String = TextBox2.Text.Replace("REPLACE", TextBox1.Text)
            If My.Computer.FileSystem.DirectoryExists("C:\Builts") = False Then
                My.Computer.FileSystem.CreateDirectory("C:\Builts")
            End If
            My.Computer.FileSystem.WriteAllText("C:\Builts\test.vb", code, False)
            Shell("C:\WINDOWS\Microsoft.NET\Framework\v3.5\vbc.exe /t:exe F:\Builts\test.vb", AppWinStyle.Hide, True)
        End Sub
    End Class
    In Textbox2 würde das stehen:

    Code:
    Module Test
    
      Sub Main()
        MsgBox("REPLACE")
      End Sub
    
    End Module
    Und in Textbox1 trägst du den Text ein der nachher erscheinen soll
    Viel Spaß!
    Pfade musst du anpassen!

  9. #9
    Capt'n Crunch Avatar von hackerking
    Registriert seit
    08.11.2008
    Beiträge
    964

    Standard

    Die Methode ist unsauber...
    Der CodeProvider ist da schon viel besser.

  10. #10
    W32.SwineFlu Avatar von Sirect
    Registriert seit
    24.07.2008
    Beiträge
    1.916

    Standard

    Der Code ist um längen kürzer und besser zu verstehen. Klar, du solltest hier mit Umgebungsvariablen arbeiten, und auch keine Replace-Funktion nutzen. Ansonsten sehe ich keinen Ansatz warum der Code schlecht sein soll.

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •