none
CodeDom Compiler auf Net. 3.0 einstellen RRS feed

  • Frage

  • Hallo,

    ich habe ein Problem. Zurzeit möchte ich mir eine Art PortableVB machen. Jedoch stellt der CodeDom.Compiler mir einen Haken, hier der zurzeitige Code:

    Dim cdp As CodeDomProvider
                If txtSprache.Text = "vb" Then
                    cdp = New VBCodeProvider()
                ElseIf txtSprache.Text = "c#" Then
                    cdp = New CSharpCodeProvider()
                End If
    
    
                ' Konfigurieren des Compilers.
                Dim compiler As ICodeCompiler = cdp.CreateCompiler()
                Dim cpParameters As CompilerParameters = New CompilerParameters()
                With cpParameters
                    .GenerateExecutable = True
                    .OutputAssembly = Me.txtApplicationName.Text
                    .MainClass = Me.txtMainClassName.Text
                    .IncludeDebugInformation = CheckBox1.Checked
                    Try
                        If Label17.Text = "JA" Then
                            .CompilerOptions = "/target:winexe /win32icon:" & TextBox7.Text
                        Else
                        End If
                    Catch
                        MsgBox("Icon wurde leider nicht gefunden, komplimierung wird fortgesetzt" & vbCrLf & "Standart-Icon wird eingefügt", CType(MessageBoxIcon.Exclamation, MsgBoxStyle), "ERROR")
                    End Try
    
    
                    ' Verfügbare Assemblies hinzufügen. Für unsere einfache
                    '  Anwendung sollte dies ausreichend sein.
                    Dim asm As [Assembly]
                    For Each asm In AppDomain.CurrentDomain.GetAssemblies()
                        .ReferencedAssemblies.Add(asm.Location)
                    Next asm
                End With
                RichTextBox2.Text = TextBox3.Text & vbCrLf & TextBox4.Text & vbCrLf & TextBox5.Text & vbCrLf
                ' Kompilieren der Assembly.
                Dim strCode As String = Me.RichTextBox2.Text & Me.CodeEditorControl1.Document.Text
                Dim cr As CompilerResults = _
                    compiler.CompileAssemblyFromSource(cpParameters, strCode)
    

    Das wäre das wichtigste in dem Code...

    Ich vertstehe einfach nicht genau, wie ich nun z.B. eine Konsolenanwendung in mit Net.Framework 3.0 erstelle. Also besser, wo ich dies einstellen muss.

    Ich hoffe, ihr könnt mir weiterhelfen ;)

    mfg

    gfcwfzkm


    Hoi
    Montag, 7. November 2011 22:37

Antworten

  • Hallo Hoi,

    Gleiche vorne weg: Das Festlegen von Compiler Optionen für eine spezifische Platform ist nicht mit einem einzigen Schalter erledigt.
    Ich lasse eine spezifische Beschreibung für den C# Compiler weg, das Gesagte gilt dort äquivalent.

    Der Visual Basic Compiler  (VBC) kennt je nach Version unterschiedlichste Optionen, siehe
    Visual Basic Compiler Options Listed Alphabetically
    Die älteren Versionen entsprechend auswählen - die letzten sind erst mit VS 2010 SP1 dazu gekommen:
    http://blogs.msdn.com/b/vbteam/archive/2011/01/10/vb-core-new-compilation-mode-in-visual-studio-2010-sp1.aspx

    Die unterstützte Zielplattform wiederum ergibt sich nicht aus einer Einstellung sondern aus einer Kombination.
    Und wie Du dort nachlesen kannst, ist selbst Visual Studio nicht immer in der Lage einen Platformwechsel
    vollständig anzupassen.

    Der /target Parameter legt fest, ob es sich um eine Konsolen- oder Klassenbibliothek usw. handelt.

    Die Zielversion wiederum ist nicht so einfach bestimmbar, sie ergibt sich aus den verwendeten Bibliotheken.
    NET 3.0 ist (wie auch NET 3.5) eine Erweiterung vom .NET 2.0 Framework, d. h. es wird im Kern die gleiche Laufzeit verwendet.
    Erst durch das Verweisen auf die Bibliotheken ergibt sich eine Zuordnung auf eine höhere Version -
    vorausgesetzt, diese ist auf dem Zielrechner überhaupt installiert!
    NET 4.0 wiederum kommt mit einem vollständig "neuen" Satz von Laufzeit und Bibliotheken.

    Für Visual Basic sind das Optionen wie /sdkpath, /reference ggf. in Verbindung mit /libpath,
    ggf. auch die Compilerversion über /langversion

    Eine umfassendere Beschreibung gibt es für ASP.NET - wo noch einige weitere Besonderheiten hinzukommen:
    Festlegung von .NET Framework-Zielversionen für ASP.NET-Webprojekte
    Im Kern gilt sie aber auch für eine Konsolen-, Windows Forms-Anwendung usw. wenn man die web-spezifischen Anteile weg lässt.

    Dein Code wäre in der jetzigen Version nicht hinreichend, da er sich auf die geladenen Assemblies verlässt,
    die sich je nach Version ändern können - mit NET 4.0 sind das durchweg andere.

    Eine Möglichkeit die Abhängigkeiten zu verringern, wäre der Einsatz von Antwortdateien,
    in denen man gemeinsame Informationen hinterlegen kann.

     

    Zudem solltest Du Dir klarmachen, dass NET 3.0 praktisch kaum eine Bedeutung hat, 
    da es nur für Vista "erfunden" wurde, und kurz darauf durch NET 3.5 abgelöst wurde.
    Praktisch haben heute nur NET Framework 3.5 Service Pack 1 und NET 4.0 eine Bedeutung - die entsprechende Umgebung vorausgesetzt -
    und mit Einschränkungen noch NET Framework 2.0 mit SP2 als Framework Basis.
    Die von Visual Studio unterstützten Client Profile (3.5SP1 / 4.0) sind nur eine Einschränkung
    bezüglich der auf dem Zielrechner als vorhandenen vorausgesetzten Bibliotheken.

    Der CodeDom wiederum ist auf .NET 2.0 stehen geblieben, neuere Konstrukte erzeugt er praktisch nicht.
    Erst mit Projekt Rosyln wird eine neue Compiler Umgebung Einzug halten, derzeit jedoch noch Beta,
    die wesentlich mehr Möglichkeiten bietet - weit über den sehr eingeschränkten CodeDom hinaus.

    Gruß Elmar

    Dienstag, 8. November 2011 10:10
    Beantworter

Alle Antworten

  • Hallo Hoi,

    Gleiche vorne weg: Das Festlegen von Compiler Optionen für eine spezifische Platform ist nicht mit einem einzigen Schalter erledigt.
    Ich lasse eine spezifische Beschreibung für den C# Compiler weg, das Gesagte gilt dort äquivalent.

    Der Visual Basic Compiler  (VBC) kennt je nach Version unterschiedlichste Optionen, siehe
    Visual Basic Compiler Options Listed Alphabetically
    Die älteren Versionen entsprechend auswählen - die letzten sind erst mit VS 2010 SP1 dazu gekommen:
    http://blogs.msdn.com/b/vbteam/archive/2011/01/10/vb-core-new-compilation-mode-in-visual-studio-2010-sp1.aspx

    Die unterstützte Zielplattform wiederum ergibt sich nicht aus einer Einstellung sondern aus einer Kombination.
    Und wie Du dort nachlesen kannst, ist selbst Visual Studio nicht immer in der Lage einen Platformwechsel
    vollständig anzupassen.

    Der /target Parameter legt fest, ob es sich um eine Konsolen- oder Klassenbibliothek usw. handelt.

    Die Zielversion wiederum ist nicht so einfach bestimmbar, sie ergibt sich aus den verwendeten Bibliotheken.
    NET 3.0 ist (wie auch NET 3.5) eine Erweiterung vom .NET 2.0 Framework, d. h. es wird im Kern die gleiche Laufzeit verwendet.
    Erst durch das Verweisen auf die Bibliotheken ergibt sich eine Zuordnung auf eine höhere Version -
    vorausgesetzt, diese ist auf dem Zielrechner überhaupt installiert!
    NET 4.0 wiederum kommt mit einem vollständig "neuen" Satz von Laufzeit und Bibliotheken.

    Für Visual Basic sind das Optionen wie /sdkpath, /reference ggf. in Verbindung mit /libpath,
    ggf. auch die Compilerversion über /langversion

    Eine umfassendere Beschreibung gibt es für ASP.NET - wo noch einige weitere Besonderheiten hinzukommen:
    Festlegung von .NET Framework-Zielversionen für ASP.NET-Webprojekte
    Im Kern gilt sie aber auch für eine Konsolen-, Windows Forms-Anwendung usw. wenn man die web-spezifischen Anteile weg lässt.

    Dein Code wäre in der jetzigen Version nicht hinreichend, da er sich auf die geladenen Assemblies verlässt,
    die sich je nach Version ändern können - mit NET 4.0 sind das durchweg andere.

    Eine Möglichkeit die Abhängigkeiten zu verringern, wäre der Einsatz von Antwortdateien,
    in denen man gemeinsame Informationen hinterlegen kann.

     

    Zudem solltest Du Dir klarmachen, dass NET 3.0 praktisch kaum eine Bedeutung hat, 
    da es nur für Vista "erfunden" wurde, und kurz darauf durch NET 3.5 abgelöst wurde.
    Praktisch haben heute nur NET Framework 3.5 Service Pack 1 und NET 4.0 eine Bedeutung - die entsprechende Umgebung vorausgesetzt -
    und mit Einschränkungen noch NET Framework 2.0 mit SP2 als Framework Basis.
    Die von Visual Studio unterstützten Client Profile (3.5SP1 / 4.0) sind nur eine Einschränkung
    bezüglich der auf dem Zielrechner als vorhandenen vorausgesetzten Bibliotheken.

    Der CodeDom wiederum ist auf .NET 2.0 stehen geblieben, neuere Konstrukte erzeugt er praktisch nicht.
    Erst mit Projekt Rosyln wird eine neue Compiler Umgebung Einzug halten, derzeit jedoch noch Beta,
    die wesentlich mehr Möglichkeiten bietet - weit über den sehr eingeschränkten CodeDom hinaus.

    Gruß Elmar

    Dienstag, 8. November 2011 10:10
    Beantworter
  • Hallo gfcwfzkm,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Freitag, 18. November 2011 09:33
    Moderator