Aspnetcore: Visual Basic .NET (VB.NET) support in ASP.NET Core

Created on 3 Jan 2018  Β·  91Comments  Β·  Source: dotnet/aspnetcore

There have been many questions asked about VB.NET support in ASP.NET Core over the past few years. If you follow them, they all lead to dead-ends - either closed with no real response, or they're moved to other repositories that are unrelated to ASP.NET Core (such as somewhere in the dotnet organization).

Over that time, there's been talk of supporting VB. It's completely understandable that ASP.NET Core didn't support VB from the outset. The project was going through a lot of rapid change, so it made sense to focus on C# initially and add support for other languages later. But the idea of supporting VB seemed to get lost along the way.

Here's a brief timeline:

Dec 16, 2014:

We plan to have extensibility points so other languages like VB, F#, etc can be added via the form of a support package or such.
https://github.com/aspnet/Home/issues/236#issuecomment-67046039

Apr 25, 2015:

Hey everyone, good news! We've announced plans to support VB in ASP.NET 5 / DNX!
https://github.com/aspnet/Home/issues/236#issuecomment-96003847

We are excited today to announce that ASP.NET 5 will have full support with Visual Basic (both tooling and runtime – including cross platform runtime support).
https://blogs.msdn.microsoft.com/webdev/2015/04/24/making-it-better-asp-net-with-visual-basic-14/

Nov 19, 2016:
VB Support disappears from the roadmap:

 |1.0.4|Feb 2017|
 |1.2|Q2 2017|

-## Future Work
-
-Visual Basic support.
-
 <em><sup>*</sup> References to yearly quarters (Q1, Q2, Q3, Q4) are calendar-based</em>

https://github.com/aspnet/Home/wiki/Roadmap/_compare/2138fe4ff8a437e8edefc333189aaa8d9b5afb6a...b49bda1f8f40975b39d14d199a9ddac0a2beb45e

Dec 12, 2017:

there are no plans to add a VB template for ASP.NET Core
https://github.com/aspnet/Home/issues/2305#issuecomment-351501913

VB support seems to have gone from

"It doesn't work yet, but we plan to allow VB"

to

"There will be full support for VB!"

to

"VB is not supported, but shhh, don't tell anyone".

So my first question is:

What happened and why was there no announcement or discussion with the community about this?

It seems strange to go from announcing support for VB.NET in ASP.NET Core in an official blog post, to not supporting it at all without any feedback. Was there any announcement about this? If there was, it certainly wasn't widely published.

My next, and _more important_ question is:

What can the VB community do to help add support for VB.NET to ASP.NET Core?

Are there project templates that we can write?
Are there code generators that we can implement?
What can we do make ASP.NET Core as awesome for VB developers as it is for C# developers?


I've thrown together a simple ASP.NET Core app (link deleted because the repo is out of date) in VB by creating a .NET Core console application, editing the project file and copying the classes generated from the ASP.NET Core C# template. It works fine, and even though it's only very basic, I can't see any reason why VB.NET cannot be supported.

Most helpful comment

+1
Visual Basic always the most important language in .NET world. VB still many fans and use today! Although many peoples work in C# project on their work place, but I believe many peoples like me, love to use VB on own project.

All 91 comments

cc @DamianEdwards

I logged an issue long time back to use VB alongside with .cshtml in Razor repo, since then I didn't see any action 😟.
Few weeks ago I saw a great example from @DamianEdwards that demonstrate a hyprid VB ASP.NET Core application here

In addition to @reduckted excellent summation, Microsoft's documentation for Razor syntax for ASP.NET Core (as at 2017-10-18) still has numerous references to Visual Basic and using .vbhtml files:

This restriction doesn't apply to .vbhtml Razor files because Visual Basic syntax places parentheses around generic type parameters instead of brackets.

However ScottAddie@MSFT had posted a comment on 2017-07-21:

ASP.NET Core doesn't yet support VB.NET. You'll need to stick with ASP.NET proper for now.

So is Visual Basic/vb.net/.vbhtml files going to be included in .Net Core? And If so when??

How can we help to make this support happen? I would love to see VB.Net and F# support!

I sent a PR to remove the VBHTML references from the ASP.NET Core docs: https://github.com/aspnet/Docs/pull/5201

There are currently no plans to introduce VBHTML support to ASP.NET Core.

We do have F# templates for ASP.NET Core, which are installed as part of the .NET Core SDK.

@Eilon There are currently no plans to introduce VBHTML support to ASP.NET Core.

Personally, I'm not concerned about VBHTML support because I don't use Razor pages, and don't intend to. As mentioned by @AnthonyDGreen (https://github.com/dotnet/vblang/issues/238#issuecomment-354927626), it doesn't make sense to add VB support to it because it was rarely used in MVC 5, and, I imagine, would take a very large amount of work for not a lot of gain.

@Eilon We do have F# templates for ASP.NET Core, which are installed as part of the .NET Core SDK.

OK, but I'm not really sure what your point is here. If anything, doesn't this just reinforce the fact that there _should_ be VB templates as well?

Weren't the F# templates created by the F# community? If the team at Microsoft won't create VB templates, then why can't the VB templates be created by the VB community?

@reduckted the question comes down to the demand for it and the cost of it - both the initial cost and the ongoing cost. The demand has been very low, as noted earlier. The cost to create an initial set of templates might not be much, but someone has to maintain them. With F# we have people at Microsoft who are committed to maintaining them. We don't have any such people for VB at this time.

Also, one limitation with the F# templates is that they focus more on the API side of things; that is, no Razor or CSHTML (because there's no FSHTML). With VB users my guess is that most users using VB would be expecting a VBHTML experience for MVC, and the cost of producing that is enormous - months and months of work. So, it isn't clear to me that adding limited VB templates would be particularly valuable.

@Eilon With VB users my guess is that most users using VB would be expecting a VBHTML experience for MVC...

You may want to speak to @AnthonyDGreen, because that's exactly the _opposite_ of what he has said in the comment that I previously linked to (https://github.com/dotnet/vblang/issues/238#issuecomment-354927626). I'll quote it this time (emphasis is mine):

The .vbhtml razor engine from MVC 5 wasn't ported to Core primarily because less than 1% of all VB web projects used it after 5 versions.

@reduckted - interesting, that is news to me. I'm thinking back to Web Forms days, which was initially designed with concepts that were familiar to VB developers (VB6, specifically), and Web Forms was very HTML-centric (sorta), so that led me to think that VBHTML would be most interesting to that group of people. Then again, that's ~15 year old anec-data πŸ˜„

BTW to be clear, we haven't said that we're never going to do it - just that it isn't currently in any plans.

I'm a VB fan πŸ˜„, which I expect .vbhtml to be out-of-the-box, the hybrid approach that I mentioned before is not enough for all the VB guys, but It's fine is some cases. My question is some re-implement the Razor to emit VB instead of C# is that gonna work, or the MVC is tightly coupled on the cshtml C#?

@hishamco Unfortunately Razor was implemented so that VB and C# were separate paths. I've talked to a few people involved and it's quite a large project.

@KathleenDollard There are other .NET Core projects that support custom ViewEngines for .pug & .md file types.

Surely we can make it work for .vbhtml razorpages files using a .vbproj with <Project Sdk="Microsoft.NET.Sdk.Web">.

@tb-mtg It's all open source if you want to explore it and see what those projects did. The folks that wrote it told me it was a big effort. The size of the effort and the exceedingly low adoption of vbhtml in earlier versions of MVC make it a hard sell.

@KathleenDollard I will repeat my question again, If I re-implement the Razor to emit VB instead of C# is that gonna work, or the MVC is tightly coupled on the cshtml C#?

@hishamco that would be a good question for @rynowak . Ryan?

MVC's runtime compilation engine uses the Roslyn infrastructure for compiling C#, and expects/requires the C# project system's settings to be passed through .deps.json. MVC doesn't have any tight coupling to the code that is generated, but rather it provides infrastructure for compiling C# views at runtime using settings generated by a C# project.

Anyone who wants to compile VB at runtime will need to implement a view engine that does that.

Thanks @rynowak for you clarification

uses the Roslyn infrastructure for compiling C#, and expects/requires the C# project system's settings to be passed through .deps.json

If I implement a VB view engine - or clone C# one with modification -, what settings that I need to pass into .deps.json to make this happen?

+1
Visual Basic always the most important language in .NET world. VB still many fans and use today! Although many peoples work in C# project on their work place, but I believe many peoples like me, love to use VB on own project.

@AnthonyDGreen @KathleenDollard

The .vbhtml razor engine from MVC 5 wasn't ported to Core primarily because less than 1% of all VB web projects used it after 5 versions.

What do the other 99% use then?

Angular, or other similar front-end libraries, I would presume. That's what I use.

Actually that is also exactly what I plan to do with our new web projects move to Angular from ASP.Net MVC Razor , I have to do 4 new web projects this year , so if someone keeps count .. LOL

VB has been a popular language for many years! As a company we certainly have many code snippets that we would not want to have to re-write in C# Im sure there are many old school web form apps that are due to be re-written especially with the new EU rules coming into play, this would mean that VB would be very much wanted! I find it amazing that microsoft blow so hot and cold on VB one minute its being developed on par, next its the poor relative! Yes new languages and frameworks are coming out but dont just ditch the popular old ones!

Glad it's being tracked here, hopefully might see some action then.

All signs (weasel words) from MS are that they plan to dumb-down VB.NET, and/or do nothing and wait for others to write the missing bits. I’m over their weasel words, I’m exiting VB.NET development now.

I just hope when Microsoft acquires GitHub it doesn't get the same treatment that VB.Net did (being left for dead with empty promises of full support).

@NatShaw I'm the PM for Visual Basic.Net.

I'm not sure what you mean about planning to dumb-down VB.NET, but there are no plans to do that. The Visual Basic language strategy remains unchanged.

Razor for VB is problematic. For the main development workflow, WebAPI is a fine workflow for VB as shown here. (aside from templates)

@tb-mtg VB.Net isn't left for dead. There are constant improvements - small improvements in the language and work like IOperation to make support for Visual Basic in Roslyn analyzers easy to support VB across the ecosystem. It is true that VB focuses on scenarios where it is already good, and appropriate new scenarios rather than all new scenarios. For example, Scott Hunter has already announced VB.Net will work with .NET Core 3.

@KathleenDollard Pieces are already missing - .Net Core 2.x - where are all the VB templates? Nullable reference types? C# only. Future plans are great for the future but VB is already missing stuff now.

This is a theme for Microsoft create a great technology and abandon it. They are abandoning VB, the language that built the company and becoming a C# only shop. When a new technology is introduced I expect all languages to be supported. Sadly this new Microsoft does not do as good a job as they did 15 years ago at keeping all languages equal partners. Its too bad, I have 10s of thousands of lines of VB and was hoping to go cross platform with it using asp.net core. Now with abandoned web forms in asp.net core and no VB I am stuck. I can change language or ??. If I do put in the effort change language It will be to something other than Microsoft, it will be to a language that was built to support all platforms. I am tired of being discounted and discharged for being a very good VB developer. It may be time to take my company and code and leave microsoft after 30 years of using and selling microsoft platforms and languages. The condescending attitude from the .net management toward VB is getting to be too much. There are still so many of us VBers out here that are so very disappointed in microsoft these days. It would be better if VB was made open source so the community can advance it on all platforms.

@SrqComputerguy They are abandoning VB

Wrong. @KathleenDollard said literally _one day ago_ in _this very thread_, that "the The Visual Basic language strategy remains unchanged." (comment)

@SrqComputerguy Its too bad, I have 10s of thousands of lines of VB and was hoping to go cross platform with it using asp.net core. Now with abandoned web forms in asp.net core and no VB I am stuck.

Web forms is old technology (practically ancient by software standards), so it's unsurprising that it's not supported in .NET Core (with either VB.NET _or_ C#). See this blog post from earlier this week about using VB.NET with ASP.NET Core.

@SrqComputerguy If I do put in the effort change language It will be to something other than Microsoft, it will be to a language that was built to support all platforms.

VB.NET _is_ cross-platform, just not with web forms.

@SrqComputerguy It would be better if VB was made open source so the community can advance it on all platforms.

πŸ˜• It is. https://github.com/dotnet/vblang

@reduckted C# has 'ASP.NET Core Web Application' template - VB does not. Is that correct? Non-nullable reference types - not for VB.

The strategy already is that VB is no longer a 1st-class citizen - no change! The article @KathleenDollard links is rather insulting, telling us these shiny new features are not good for us because they'd make our VB code too untidy. What a load of weasel-word nonsense. Examples:

  • VB 15 comes with a subset of C# 7.0’s new features
  • We will focus innovation on the core scenarios and domains where VB is popular.
  • However, VB 15 does not get features such as is-expressions, out-variables and local functions, which would probably do more harm than good to VB’s readability, and add significantly to its concept count.

It's over. They're dumbing it down.

Old technology does not mean it is not useful. WebFroms work great for line of business applications where we do not need SEO, but we do need cross platform. WebForm make the look and feel of the winform version look and act similar. That also has many business scenarios that it works well. Not everything needs to be a C# MVC angular.js application nor should it be. Yet that is the only tools that MS is improving at the moment.

Why do razor pages (which are updated asp pages for .net) get C# love in core and not VB?

MS even bought the Mono project so now that supports C# first and only if they get the ok does VB get some love there.

MS is giving Python more love than VB. Python is more of a cross platform language than C# or VB which is where this VBer will probably go in the future.

Its sad the MS is relying on a language that still does not know how to tell the end of a line without a ;

Does MS even have a VB team anymore? They dont have a web presence. For advancements we will have have to look elsewhere.

It was good while it lasted. VB RIP.

Hi,

Can someone at Microsoft reconsider the effort to compile vb in razor views (.net core)? I think that project blazor enables a new way to share a lot of existing code in vb to create new web applications.

VB .NET was once more popular because you can do the same things that you can witn C#. I think that if vb is left behind, you will effectively end it's popularity.

We are porting a very large VB winforms app to a web app. We are 50% in the way rewriting our framework in JS, but with blazor it would be faster, cleaner and we can share a lot of existing code. It would be awesome if we can also code the views with VB instead of C#. Not everything is MVC and razor.

So, maybe focusing in blazor would make the effort smaller?

After having to work with modern and legacy VB code for several years now, I cannot wait for the verbosity to die. I think it's smart for Microsoft to focus on one style of languages (C).

@mcurros

Razor support has been considered and reconsidered.

While it's very exciting, right now Blazor is an experimental effort, without product plans. I agree that if Blazor becomes a product it's worth reconsidering VB's story and I expect that will happen. Whether that results in a change in strategy regarding VB support, I don't know.

Three questions for you:

  • Do the announcements about WinForms moving forward to .NET Core 3 lead you to reconsider your decision to port the WinForms code?

  • You are rewriting for the web. Are you using a VB WebAPI back end like this: Combining Angular, Visual Basic and .NET Core for developing modern web apps?

  • You are using JS, which means parts of your team are effectively using a curly bracket language. What are the reasons you are not converting to C#?

There is nothing that is being done in C# exclusively that cannot be done in VB. MS makes the IL converters. It is a matter of will.

Here is a question for you. If you have a large number of line of business apps that have a web version .net 4.5.2 that look and act like the desktop version how would MS suggest they go cross platform.

So is it official that MS is dumbing the Idea of including VB developers in Asp.net Core wave and is not interested in spending resource for it?

@sreenathGanga1988 We'e announced that there are no current plans to support Razor in .NET Core on Visual Basic.NET. WebAPI which is in ASP.NET Core as part of MVC is supported. It's only Razor that is not supported. The Razor engine is complex, and was created for single language.

@KathleenDollard you could create VBHTML.Contrib to allow the VB fans to contribute to build a razor engine using the current Razor Engine to support VB

The folks that wrote the new version of Razor believe that it is very complicated to include Visual Basic, because it was not designed for multiple languages. I haven't looked at the code, but will trust those folks opinion. Based on that, I'm not going to create a fork.

However, ASP.NET is open source for a reason. If a group of VB devs were to create a fork anywhere and prove them wrong, that would be a rather cool. I'm happy to have this issue or another issue in this repo point to the project, and if I'll tweet it's existence and progress if desired.

I've laid the groundwork with the .NET Foundation for a Visual Basic space (possibly contrib, possibly something else) so that there is a way to manage ownership and such admin things for projects in a Visual Basic community. However, they need evidence that there is a community that will have repos providing things people want (the Foundation works to avoid dead projects). I had hoped the Entity Framework templates would be that seed, but that has not gone well. This is not specific to VB, and is why you see things in personal repositories: VB EF templates in @bricelam, the global tools catalog at @natemcmaster, and a forked version of a command line parser @natemcmaster while we work on a new one.

So, while a project and prototype isn't enough to get Foundation interest, if a successful project emerges, it can be moved to the .NET Foundation.

Thanks for your clarification, but still i'm not sure why the Razor built to target C# only while the Roslyn can support both of them!!

I haven't looked at the Razor code to know whether it directly builds a syntax tree, but assuming it does...

Roslyn works with specific, explicit, raw syntax trees that are different for C# and VB. For example, sei-colon and curly braces exist in C#, not VB. End Sub and Handles exist in VB and not the C# syntax tree.

@KathleenDollard

Yes I understand project blazor is experimental, but it compiles to web assembly and it's an easier way to do cross-platform apps (sharing existing code on server and clients, I happen to like windows server and ASP .NET so I prefer running a server that supports the full .NET framework to reuse our existing code base).

As for your questions:

  1. .NET core 3 does not make WinForms apps cross platform, so it doesn't add too much.

  2. I'm rewriting for the web because it makes our apps cross-platform. We are using an ASP .NET controller to share the existing code, so on the server we have no problems. As I said, we are using our own framework, which is starting to provide the same functionality in JS, but we need to re-write the client code again, and test it, and the UI is still taking at least 80% of development time.

  3. We started to port our framework to JS before project blazor. Rewriting in C# will not make our client app cross-platform, it will require to target the browser anyway or convert to Xamarin or something else, so the effort is the same.

I program in C, C++, C#, VB, JS and know how to use several stacks, but we have several members in our team that will struggle to convert to another language. Anyway, the point is to reuse our tested code base, not to rewrite it. If blazor could compile VB in views it would save us a lot of time, that's all.

Also it's weird for users to understand that they could compile razor views before in VB .NET with the full framework. It just looks like you left behind VB. And all started with .NET core, wasn't first an experimental project?

To add a little more context we are porting three mission critical ERPs, for different line of business.

Regards.

@mcurros

Thanks for sharing more about your scenario.

The Razor engine was rewritten for ASP.NET Core and that is where the effort for multiple languages was not made. Low usage of the VB version of the Razor engine was one of the driving factors. And yes, the existence of Blazor makes that decision quite painful.

@KathleenDollard

Thank you Kathleen for sharing the insights. I hope languages in .NET don't start competing against each other, one of the most appealing things with .NET was the languages and interoperability between them, now it seems that would no longer be the case. Now it's not enough to choose .NET as a development stack, I guess we will need to be careful about the languages we choose, too. Pity, it feels like a step backward.

On e last question, though, I think razor was written well before .NET core, with ASP .NET webpages and webmatrix, so I think you mean that the razor engine was re-written in .NET core targeting C#. Am I right?

Best of luck.

Hello,
I have found this post: Why not Razor?.
What do you think about avoiding completely the use of Razor syntax in ASP .NET Core and Blazor projects in favor of a pure C# and VB.NET development? Are we sure that we need Razor syntax to develop web applications that need to emit HTML5 and CSS files?

Regards,
Filippo.

@filippobottega

Oh well that was before blazor. The problem is that you need a templating engine at the client, and in the case of blazor is just that. In blazor razor is executing in the browser not the server (but it could execute at the server if needed). So, people are trying to share code between client and server in the browser for ages. Sharing validation code will be a simple case, but in our case we share metadata describing models so components can configure themselves using that metadata.

Node.JS has become popular because you can share code between the browser and the server. So why not share .NET code between browser and server? Razor gets compiled to a webassembly with your shared code, and that's it. Yes, you could compile and run and distribute your app, but the browser has better crossplatform capability and you will target more platforms with the same code. I have also seen WPF compiled to webassembly if you wish to go that way.

We prefer to take advantage of the existing JS components and mix them with our .NET base, but we prefer .NET and razor as a replacement for other JS frameworks, like angular. It's 10x more productive if you know what your are doing, at least for us.

Regards.

@mcurros Yes, a great deal was reworked/rewritten in ASP.NET Core (look at the pipeline model as an example), including Razor.

@mcurros Ok, it's true that we need a template engine but the problem is that the Razor syntax is not supported by a solid WYSIWYG designer.
For example Blazor uses Bootstrap as CSS library. There is a interesting designer for Boostrap named Bootstrap Studio but it doesn't support Razor syntax.
For WinForms desktop applications, there is a good WYSIWYG designer to quickly design interfaces, for XAML the same. There is a designer we may use to quickly create HTML5-CSS with Razor syntax views (.cshtml/.vbhtml) ?

@filippobottega
As the devices that can run browsers are in the 10K order, I think that making an accurate WYSIWYG tool does probably not worth the effort. The trend these days is to run it in the browser and let the browser make the rendering. Blazor samples use Bootstrap, but razor is a templating engine, you can emit what you want and the CSS/HTML framework you like. The interesting parts are, the compilation to webassembly, and the modified razor to provide SPA routing, and all the things you need to build an SPA client. Plus if needed you can render that at the server (for public websites and search engine indexing). I think it's pretty cool.

So blazor provides real time webassembly compilation and run in browser hitting F5. It's fast, try it.

@mcurros Thank you for your answer. I agree with you even if I think the possibility to change the templates structure with drag and drop using the browser preview may be really useful.
If think about a developer preview where components have the ability to be moved, resized and embedded in other components with drag end drop, finally updating the CSHTML template.
For example Concrete5 let you change the layout on the fly.
Let me know if you think that a "design mode" will be feasible in the future.

Best regards,
Filippo.

I don't think will be a future for VB:
Microsoft's new strategy to end the co-evolution of C# and Visual Basic will make it even less respected by developers
C# is the future for .Net developers, so it's time to limit Visual Basic's use to on-premises legacy systems

https://www.infoworld.com/article/3167210/application-development/visual-basic-is-the-odd-man-out-in-the-new-net.html

https://www.infoworld.com/article/3254564/application-development/doing-nicely-now-visual-basics-popularity-could-take-a-hit.html
https://blogs.msdn.microsoft.com/dotnet/2017/02/01/the-net-language-strategy/

250 million lines of code, half of which is still in use, now must be rewritten. VB.Net got killed due to the latest generation of programmers complete ignorance of the language itself (and all the idiots that kept comparing it to Visual Basic - Apples to Oranges) with absurdly false comparisons in performance and other vectors. RIP VB.Net and the millions of developers that will lose their jobs as a result.

Like @DamianEdwards, I ported the example "ASP.Net Core Web Application" from C# to VB. It is (successfully) using Razor .cshtml files in a VB project. I have ensured it is compatible with ASP.Net Core 2.1. You can find it here:

https://github.com/mevdschee/aspnetcorevb

@marcusoftnet Damian example is cool to use .cshtml for views and the rest of the app in VB.NET, but it will very cool to use the .vbhtml for the views πŸ˜ƒ

Yo no se que tiene Microsoft en la cabeza, teniendo en las manos un Lenguaje de ProgramaciΓ³n como VB pudiendo apropiarse en la Web de los dos ambitos del lado del cliente y de lado del servidor

cliente: vbscript
servidor: vb

Pulir VB es algo que los beneficiaria, es comprensible, entendible y adaptable, realmente da mucha lastima y nostalgia saber que vb.net no estΓ‘ en la web, pero es culpa de ustedes y centrarse solo en uno

Bing translation:
I do not know that has Microsoft in the head, having in the hands a programming language like VB being able to appropriate on the Web of the two areas of the client side and server side

Client: VBScript
Server: VB

Polishing VB is something that the beneficiary, is understandable, understandable and adaptable, really gives a lot of pain and nostalgia to know that vb.net is not on the web, but it is your fault and focus only on one

This will let VB.NET continue to be supported to add the features that's already added in C#, but again no vbhtml πŸ˜•

@hishamco No. While I share your :( the Razor engine supports C# only.

Razor engine supports C# only

That's what I meant πŸ˜„

Tibor Index Shows VB.NET growing, anyway we Need vb razor

Like @DamianEdwards, I ported the example "ASP.Net Core Web Application" from C# to VB. It is (successfully) using Razor .cshtml files in a VB project. I have ensured it is compatible with ASP.Net Core 2.1. You can find it here:

https://github.com/mevdschee/aspnetcorevb

@mevdschee I'm curious as to the process you went through for porting it over into VB.NET as the project template isn't available through Visual Studio / no support in VSCode. How did you go about doing this?

@Webbarrr I converted the C# code to VB by hand and used the Visual Studio C# template to start from.

@reduckted @hishamco @muratg @tb-mtg @brunojuliao @Eilon @rynowak @CheungTatMing @VBDotNetCoder @simonmilne80 @NatShaw @SrqComputerguy @sreenathGanga1988 @mcurros @filippobottega @mrjohnr @beefydog @mevdschee @Baner041986 @hannespreishuber @Webbarrr

I agree that vbhtml is a lost cause, because VB.NET code doesn't fit well amoung HTML, CSS and JavaScript syntax! Instead, I ask for vbxaml !
I posted this suggestion in VB.NET repo months ago:
https://github.com/dotnet/vblang/issues/329
These are quotes:

Let VB.NET ride the new WebAssembly wave:
After WebAssembly and Blazor, the opportunity represents itself: It is logical now to write XAML instead of HTML5 (differences are minimal) and write VB.NET instead of Java script (the same way C# replaces Java now in Blazor).
There is already a project named Ooui trying to do that in C#.
I think, VB.NET should do the same, and have a project to design ASP.NET pages with XAML and VB.NET code, making use of the work done in SilverLight, Blazor and Ooui. If this starts now, it can grow steadily, instead waiting for Blazor and Ooui to stable and then MS say:
Sorry, it will be expensive for VB.NET to catch up!

VBlazor (.vbxaml) will make desktop developers experienced in VB.NET and WPF/UWP move to ASP.NET smoothly.

IMHO using XAML or templating language such as Fluid will make all happy, because the Razor is written for C# only

VBLazor would be similar to uwp/wpf design view, but with two code-behind files, one for server vb.net codes, and another for client (script) codes, with the ability to use MVVM pattern to organize large projects. XAML will be complied to html5, Xaml styles will be compiled to CSS, and VB.NET script codes will be compiled to WebAssembly.

I'm closing this because, sadly, it's pretty clear that there is no intention to add VB.NET project templates for ASP.NET Core.

@reduckted @muratg @tb-mtg @brunojuliao @rynowak @CheungTatMing @VBDotNetCoder @simonmilne80 @NatShaw @SrqComputerguy @sreenathGanga1988 @mcurros @filippobottega @mrjohnr @beefydog @mevdschee @Baner041986 @hannespreishuber @Webbarrr

Finally: A working VB.NET ASP.NET MVC Core Razor sample!
https://github.com/VBAndCs/VB.NET-Razor
I implemented a simple VBRazorViewEngine in the VbRazor project.
To use VBRazorViewEngine in the project, I added these two statements to the Startup.ConfigureServices method:
```VB.NET
services.AddTransient(Of IConfigureOptions(Of MvcViewOptions), VBRazor.VBRazorMvcViewOptionsSetup)()
services.AddSingleton(Of IViewEngine, VBRazor.VBRazorViewEngine)()


The VBRazor is just a VB class that implements the IVBRazor Interface:
```VB.NET
Public Interface IVBRazor
    ReadOnly Property Razor As String

End Interface

The Razor property uses the xml literals to compose the HTML code and returns it as a string.. Example:
```VB.NET
Imports VbRazor

Public Class IndexView
Implements IVBRazor

Dim students As List(Of Student)

Public Sub New(students As List(Of Student))
    Me.students = students
End Sub

Public ReadOnly Property Razor As String Implements IVBRazor.Razor
    Get
        Dim x = <html>
                    <h3> Browse Students</h3>
                    <p>Select from <%= students.Count() %> students:</p>
                    <ul>
                        <%= (Iterator Function()
                                 For Each std In students
                                     Yield <li><%= std.Name %></li>
                                 Next
                             End Function)() %>
                    </ul>
                </html>
        Return x.ToString()

    End Get
End Property

End Class


To use the IndexView from the Controller, I passed it to the View method as the model data in the action method, and passed the actual model data to its constructor:
```VB.NET
Public Function Index() As IActionResult
    Return View(New IndexView(Students))
End Function

That’s all!! If you run the project, you will see this web page:
VBRazor

This was really easy, but needs more work, so I hope you start contribute to this project to make it a real productive tool!
The first thing to do, it to create a VB.NET template for ASP.NET MVC Core. I had to create a C# project then convert it to VB!

The second thing to do, is to add intellisense support for html attributes in xml literals in VB!

Truth view engine need to parse sort of template like what we have seen in Razor or Markdown .. etc, but what you did is easy because the final markup generated from the code behind which is what the generated classes from Razor did

@hishamco
I did this in a couple of hours, thanks to VB XML literals, which is almost forgotten! I mayself forgot about it until few weeks when I was trying to invint some new syntax to suggest so I wrote and the editor completed it with the closing tag :)
However there is a lot to do to make this idea a complete product. I wish you and others help in this, so we can write real MVC Cpre apps with VB.NET.
There is a room in gitter for VB Volunteers:
https://gitter.im/VB-NET/Volunteer
Thanks.

Xml literal is a very good feature that VB only has. Regarding vbhtml it needs time and efforts and I am one of the interested guys from the past, hope if we can start on this soon

Hi all,
This is a functional VB Razor (Vazor). Have Fun:
https://github.com/VBAndCs/Vazor

Hi all,
Please support this proposal https://github.com/aspnet/AspNetCore/issues/9270
It can be the easy alternative to create vbhtml pages.

@VBAndCs , please try to avoid posting on old closed issues. We try to keep this issue tracker for bugs and feature requests in ASP.NET Core and minimize other discussions.

@Eilon
Sorry, but this is a feature request that doesn't exist yet. Being closed should not bother you,but it is still poping up on google search, so it is important to keep all related info about this topic together.
Anyway,this is my last response in this topic.
Thanks

@VBAndCs, please don't be discouraged by the bossy tone of @Eilon (a Microsoft manager, not a developer, according to his Github bio). I guess he is just using strange words to say "thank you for your awesome contribution".

@mevdschee
Thanks for your support :). I can imagine the huge pressure @Eilon is under with hundreds of notifications per day, bugs to fix, discussions to make , questions to answer and suggestions to reject :dancing_men:
So, I will refer to this topic in my mew proposals (which I hope they keep coming until VB.NET restore its righteous place :) ).
I hope Eilon discuss important proposals or at least let them open for a while to allow community to discuss them instead of jumping immediately to the close button.
Thanks again @mevdschee , and sorry @Eilon :)

I have been following this thread for a long time as a proper full solution really in my opinion should have been on the road map without having to be forced. I was slightly dissapointed though to see after the hard work put in by @VBAndCs that @Eilon would try and stop anyone else trying to help solve the issue for so many people! I can understand there is a lot of pressure, however the fact people are still following this shows its important to a lot of people! Keep up the good work :)

Hi everyone,

We strongly encourage community activity and features, but we cannot accept certain feature requests or bug fixes because they are not a high enough priority for us to implement. This even includes the case where there's a pull request that includes tests and documentation. Making any change of any size has a cost, including long term cost, and we have to balance that against all the other potential work that we are considering. When it comes to view engines, we are 100% committed to the Razor view engine with support for C#, and a great editor experience in Visual Studio, Visual Studio for Mac, and Visual Studio Code.

We believe that there is a great opportunity here for people such as @VBAndCs to create additional projects that work with ASP.NET Core and integrate in a variety of ways. We're happy to link to those projects by having people send PRs to readme files such as the MVC readme.

Thanks,
Eilon

To @simonmilne80, @mevdschee and any one who is interested:
I added a working example of zml pages to the repo, so please, lets take the discussion to this topic: https://github.com/VBAndCs/Vazor-DotNetCore2/issues/1
and give @Eilon some moments of peace :)

BTW we're looking to add a mention of Vazor to an upcoming ASP.NET Community Standup. Do you have a blog post we can reference in addition to the GitHub repo?

@Eilon
Sorry for delaying my reply. I needed to complete my work first, and write a readme file containing basic info about ZML tags.
ZML 1.0 now has its own repo and NuGet.
I would approciate if you mention ZML, becuase it is language independent (the repo contains a project sample with c# and VB two versions, and they both use the same .zml files.
Thanks.

Looking into converting my VB.NET WebForms app to .NET Core Razor Pages. If true that VB will not be supported then what modern ASP.NET path should I migrate to instead? Re-writting the app in C# is not an option.

@Gruski if there's a lot of VB.NET code that is "library" code - that is, not even WebForms-specific - then that all works quite fine in the .NET Core / Razor Pages / Blazor world. It's the WebForms vs. Razor (and Blazor) part that's much more work.

We did just release a preview of an e-book to help developers migrate from WebForms to Blazor:

https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/index

So it might be possible to keep some of your app in VB, and then only the UI would need to be C#.

So it might be possible to keep some of your app in VB, and then only the UI would need to be C#.

You can use a VB.NEt project for the UI as well. Only the cshtml files will contain C# chunks. If you want to avoid the C# code, you can use xml literals in VB.NEt to design the UI as I did in my Vazor project:
https://github.com/VBAndCs/Vazor-DotNetCore2
Anthony Green took this to another level as you can see in his last topics in his blog:
https://anthonydgreen.net/
Or here:
https://github.com/dotnet/vblang/issues/483
I also suggested to use an XML tag commands to avoid both C# and VB and have a pure XML Razor (I called ZML):
https://github.com/VBAndCs/ZML

Although our project is a WebForms project, we are no longer using it as was originally intended. This was an old but large enterprise application that over the years has been converted to solely use Vue.js client side framework calling WebMethods residing in each of the .aspx code behind pages. So there are: no server components (no runat="server" anything), no viewstate, no full page posts (no "form" element). Other than the Load method which dynamically initializes some Vue client side components, the code behind only contains WebMethods.

With this in mind and the requirement to move to .NET core what new ASP.NET tech should I migrate the project to if I want to get away from WebForms? MVC to me makes no sense since Vue.js already has the MVC pattern on the client side, which is my opinion is more elegant, so why would I need it on the server? Blazor makes no sense either because that would entail rewriting the entire UI again.

@Gruski I would recommend Razor Pages. It's extremely easy to start with: Just created a Pages folder in your ASP.NET Core app and start adding .cshtml files to it. Each page is essentially a URL, and you can put arbitrary HTML in it, then add any C# you want for server logic.

Try this tutorial to get started: https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-3.0&tabs=visual-studio

@Eilon Do Razor Pages have code behind to place WebMethods in? Otherwise where would the WebMethods be placed? Looking at it it looks like it still uses a simplified version of server side MVC pattern behind the scenes which is redundant when using Vue. Also no VB support in Razor Pages.

Razor Pages don't support WebMethods. I would recommend using MVC for those methods. You can mix Razor Pages and MVC in the same app.

@Gruski I have been travelling and just catching up.

If you have your UI in Vuew.js, can you just use ASP.NET Core MVC/WebAPI? This works fine. While this article is a bit much in including Angular, it does show the general technique: https://devblogs.microsoft.com/vbteam/combining-angular-visual-basic-and-net-core-for-developing-modern-web-apps/

There are two areas of issues with support:

  • Razor is not supported for Visual Basic, although as pointed out @VBAndCs and @AnthonyDGreen have both worked out a potentially better solution for Visual Basic.
  • There are no templates for ASP.NET WebAPI.
Was this page helpful?
0 / 5 - 0 ratings