Visual Basic 14 und Webforms

Bereits seit 2015 hat Visual Basic (und auch C#) einige neue Sprach Features. Zwei VB.NET Funktionen haben es mir dabei angetan in meiner täglichen Entwickler Arbeit.

Multi Line String Literals

Bereits die XML Literals haben Jahrelang dem C# die leichte Zornesröte des Neides ins Gesicht getrieben. Gibt es meines Wissens bis heute nicht, wobei natürlich XML heute sowieso Bäh ist und durch JSON zu ersetzen.

Mein Problem sind immer mehrzeiligen komplexe SQL Abfragen im Source Code. Mit Multiline String Literals geht nun Copy Paste und das lästige schachten in Hochkommas und das verketten mit dem Plus Operator entfällt.

image

String Interpolation

Nicht ganz so nützlich, aber deutlicher Gewinn an Lesbarkeit. Es wird das $ Zeichen verwendete um direkt Variablen, samt Format Expression in geschweifte Klammern platzieren zu können. $ ist die Kurzform von String.Format.

   1:  Dim s = $"hello {p.Name} you are {p.Height:0.00}m tall"

 

Nun setzen diese Sprach Features auf den neuen Kompiler (Rosyln) auf. Der fehlt in Web Forms Projekten und Websites. Dort gilt praktisch noch VB 12. Das war mein Wissensstand bis gestern.

Ich war wieder einmal unzufrieden mit dem 10 zeiligen SQL Script im Quellcode. Relativ schnell bin ich auf die Lösung für Roslyn in ASP.NET Webforms Projekten gestoßen. Um den VB 14 Compiler verwenden zu können, wird das Nuget Paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform  in das Projekt installiert.

Nun arbeite ich in der Regel nicht mit Projekten sondern Websites. Der feine Unterschied wird manch einem nicht bekannt sein. Websites betrachten jede ASPX Datei als eigenes “Projekt” und erstellen einzelne Assemblys und nicht wie bei Projects eine dicke DLL ins BIN Verzeichnis. Man erkennt in der ASPX Datei dies am Attribut Codefile (Website) statt Codebehind (Projekt). Außerdem müssen Klassen im APP_CODE Ordner abgelegt werden. Das bedeutet ich kann einen ASPX Seite oder die zugehörige .vb Datei in Notepad editieren. Kompiliert wird diese (und nur die geänderten) Automatisch beim erstem Aufruf. Razor Pages haben später das Konzept übernommen.

Jedenfalls klappt das mit Websites nicht, trotz installation des NUGET Pakets. Eine kleine Änderung in der web.config bring dann doch auch eine ASP.NET Website auf die VB 14 Language Version. Einfach “default” auf “14” ändern.

   1:  <system.codedom>
   2:    <compilers>
   3:        <compiler language="c#;cs;csharp" extension=".cs"
   4:          type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, 
Microsoft.CodeDom.Providers.DotNetCompilerPlatform,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

5: warningLevel="4"

compilerOptions="/langversion:default

/nowarn:1659;1699;1701"/>

   6:        <compiler language="vb;vbs;visualbasic;vbscript" 
extension=".vb"

7: type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider,

Microsoft.CodeDom.Providers.DotNetCompilerPlatform,

Version=2.0.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35"

   8:          warningLevel="4" 
compilerOptions="/langversion:14 /nowarn:41008
/define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"
/>
   9:   </compilers>
  10:  </system.codedom>
Kommentare sind geschlossen