Bringing RefSrc ASP.NET WebForms to Mono (and beyond)


#1

On and off over the past year or so, I’ve been chipping away at getting WebForms reference source into Mono. I’ve made a lot of progress and am posting here to get advice on how to move forward, raise awareness, get help, etc.

Background

I bet you're asking why, huh? Well, to be honest, I was just trying to find something interesting to contribute open source wise. I stumbled upon Miguel's post and thought wow - that's a pretty cool thing that nobody is doing. And so I started....

What are the Benefits?

I have to imagine that there are a subset of people that do not want to upgrade, but desire a similar set of deployment options you get w/ Mono and Core. The main benefit, I guess, would be that these people aren’t left out. Additionally, I see the community could have an actual channel to get webforms features in and potentially adopted upstream.

What Has Been Ported?

Typically, a post like this may come much earlier in the process, but fortunately (or unfortunately) for me, that is not the case.

Following along at my repo github.com/steveisok/mono, I have the following functional:

*Note - This is all based on 4.6 of refsrc.

  • System.Web
  • System.Web.ApplicationServices
  • System.Web.DataVisualization
  • System.Web.DynamicData
  • System.Web.Entity
  • System.Web.Extensions
  • System.Web.Mobile
  • System.Data.Linq

In addition, I also pointed System.Configuration at corefx (I think it’s on Mono’s to do list), aspnet_compiler, and a few other tools that escape me.

WCF was NOT part of the port btw.

To bookend this, the tests that were previously written in each of these assemblies pass. Thanks Alexander from the Mono team for pushing me :+1:!

What Is Experimental?

  • Kestrel Integration (only have it local for now)
  • Microsoft.VisualBasic refsrc working w/ Rosyln VBC.

With respect to Kestrel, I just got this working by tweaking some webforms app domain startup code and wrapping HttpContext. As for VB, I was trying to get DotNetNuke to compile, so I forked mono-basic and pulled in refsrc. It works, but it needs polishing.

What Apps Were Tested?

I hosted WebForms using XSP. I found it easiest to put the XSP assemblies in the GAC to make it all work.


There are two main ones that I have on github. Being a new user, I can’t put too many links or images in the post :-(.

DasBlog (https://github.com/steveisok/dasblog)

Kaliko WebForms Demo (https://github.com/steveisok/kaliko-webforms-demo)

What is Next?

I’m thinking we engage the Mono team and try to determine how this gets prioritized / reviewed / tested.

I’ve also found that there are missing refsrc classes (System.Web.Caching, RegularExpressions, etc). How do we contact the right people to fix this?

It would also be great if you all could give feedback. Does this seem like a worthwhile approach? Would it be useful? How does this proceed?

Everyone’s input is wanted and appreciated. This started as something neat to try and has become a little bit of a passion of mine. I’d love to see this come to light and I certainly do not have all the answers.


#2

I love this! We have some large webforms applications at work and I hope this can help us pave the way forward.


#3

This sounds very exciting! I see some real-life use cases. Why focus on Mono instead of .net core? Does Mono provide something .net core doesn’t yet have?


#4

To be honest, it was easier to work in Mono because it already has System.Web inside of it. So, from that angle it was easy for me to see if this was doable or not and pick up a lot of momentum.

This past fall I did try to take what I had and port it to core, but I stopped. There are missing classes, which when added, require build/ref changes… I found it pretty difficult to alter after many attempts.

It’s not that core is ‘not providing’ something… I think it’s slimmed down and not as intertwined by design. It is possible, but there seem to be internal technical (and political I’m sure) challenges to get there.


#5

Impressive thanks for sharing such impressive information.


.NET Foundation Website | Blog | Projects | Code of Conduct