[VB.net]Codedom error beim compilen

  • Allgemein

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

    [VB.net]Codedom error beim compilen

    Hallo
    was ich ich vorhabe ist es in der Laufzeit eine .exe zu compilen, mit codedom
    und zwar wollte ich so eine art msgbox generator erstellen.

    mein code sieht erstmal so aus:

    Quellcode

    1. Dim para As New CompilerParameters
    2. para.GenerateExecutable = True
    3. para.OutputAssembly = "C:\Users\Public\Desktop\aasay"
    4. para.ReferencedAssemblies.Add("System.Windows.Forms.dll")
    5. Dim resu As CompilerResults = New VBCodeProvider().CompileAssemblyFromSource(para, My.Resources.source)
    6. For Each er As CompilerError In resu.Errors
    7. MsgBox(er.ToString)


    in der source.txt steht:

    Quellcode

    1. Imports System
    2. Imports System.Windows.Forms
    3. Class test
    4. Private Shared Sub Main()
    5. MsgBox("hallo")
    6. End Sub
    7. End Class



    Wenn ich das programm dann als admin ausführe bekomme ich:
    ---------------------------
    codedom mgsbox generator
    ---------------------------
    vbc : (0,0) : error BC30737: Es wurde keine zugreifbare Main-Methode mit entsprechender Signatur in "aasay" gefunden.
    ---------------------------
    OK
    ---------------------------


    ---------------------------
    codedom mgsbox generator
    ---------------------------
    C:\Users\Josi\AppData\Local\Temp\xoivrusa.0.vb(8,0) : error BC30451: "MsgBox" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
    ---------------------------
    OK
    ---------------------------



    Weiß nicht mehr weiter
    Hat jemand eine idee was ich noch machen kann?




    edit:
    Ach mist habe gerade gesehen das ich ich im falschen bereich gepostet hab ^^
    bitte verschieben

    Tommi8821 schrieb:

    ist nicht deklariert.
    Zunächst sollte das Compilat in der Entwicklungsumgebung laufen.
    Mach Dir eine Console-Anwendung, da würde dann drinstehen:

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. MsgBox("hallo")
    4. End Sub
    5. End Module
    Da kannst Du Dir aus den Verweisen dann die erforderlichen Assemblies zusammensuchen.
    Für Für MessageBox.Show("hallo") bräuchtest Du dann andere Bibliotheken.
    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!
    Ich nehme an, dass die Methode, die CodeDom erwartet, zwar Main heißt, aber Parameter hat.
    Wahrscheinlich Public Sub Main(args As String())
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    aber Parameter hat.
    Es geht beides:
    Entweder siehe oben
    oder

    VB.NET-Quellcode

    1. Module Module1
    2. Public Sub Main(args As String())
    3. If args.Length > 0 Then
    4. MsgBox(args(0))
    5. Else
    6. MsgBox("hallo 2")
    7. End If
    8. End Sub
    9. End Module
    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!
    Ich habe zwar lang nichtsmehr mit VB gemacht, aber liegt es vielleicht daran das die Sub Private ist?

    Tommi8821 schrieb:

    Private Shared Sub Main()


    denn

    Tommi8821 schrieb:

    Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    @KidRick
    Ne ne. Auf MsgBox konnte nicht zugegriffen werden.
    Die Standard-Signatur der Main-Methode von einer Konsolenanwendung hat nähmlich noch einen String-Array als Parameter für übergebenden Argumente an das Programm wie @ThePlexian bereits sagte.
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    Sowohl Argumente als auch Rückgabewert sind für die Main-Methode optional.
    msdn.microsoft.com/de-de/library/ms235406.aspx
    Allerdings muss die Main-Methode Public sein.

    Dass MsgBox nicht funktioniert liegt am fehlenden Verweis auf Microsoft.VisualBasic, aber damit braucht man gar nicht erst anfangen, gleich MessageBox.Show benutzen.
    SO
    das "MsgBox" ist nicht deklariert kam, weil

    Quellcode

    1. Imports Microsoft.VisualBasic

    mir rein muss, macht jetzt auch sinn ^^

    Als Module läuft das ganze.

    Aber wenn ich das ganze als claas schreibe bekomm ich:
    ---------------------------
    codedom mgsbox generator
    ---------------------------
    vbc : (0,0) : error BC30737: Es wurde keine zugreifbare Main-Methode mit entsprechender Signatur in "aasay" gefunden.
    ---------------------------
    OK
    ---------------------------



    bringt auch nix wenn ich der Main Parameter gebe.
    habe Public Sub Main



    EDIT:
    so problem gelöst es muss

    Quellcode

    1. Public Shared Sub Main()

    sein ^^

    aso und noch was
    wenn ich das ganze nicht als admin starte bekomm ich:
    ---------------------------
    codedom mgsbox generator
    ---------------------------
    vbc : Command line (0,0) : error BC2012: Fehler beim Öffnen von "C:\Users\Public\Desktop\aasay" zum Schreiben.
    ---------------------------
    OK
    ---------------------------



    kann man da was machen?

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

    Tommi8821 schrieb:

    Fehler beim Öffnen
    Probier zunächst mal mit c:\Temp\ einen Pfad, bei dem Du immer Schreibrechte hast.
    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!