ASP.Net 5 (aka vNext) is now in Beta and the Visual Studio 2015 preview is now out! So, what is this new ASP.Net? The 2 biggest features is that itās totally open source and it will support a cross platform runtime = great!! But itās worth knowing that this is more or less a rebuild of ASP.Net and thereās quite a few things that weāve become accustomed to that will now be totally different.
Configuration files
You know all of that junk in the web.config and perhaps in a bunch of other *.config files? Well that is gone! I think this is wonderful news because creating those configuration sections was a huge pain. Even better news is how easy creating custom configuration inputs will be in ASP.Net 5 using the new IConfiguration and ConfigurationModel sources. OOTB Microsoft is releasing support for JSON, XML and INI files for configuration but of course you can easily create your own. The repository for the configuration bits is here and a nice tutorial can be found here.
So what about configuration transforms?? That is also a thing of the past. In ASP.Net 5, āconfigurationā will mostly be done with code found in your Startup.cs file, anything that you want to enable in your application is done in this class. Any package that is installed in your app, you will need to opt-in to use it in your Startup.cs file. In some cases however, a configuration file might need to be updated/transformed⦠this could be due to an upgrade of a package. The good news is that the configuration sources in ASP.Net 5 are writable (IConfigurationSource) which means during startup or first access to your config, you could detect what needs to be updated to support your new version, make the updates in code and commit (ICommitableConfigurationSource) the changes.
Wait⦠isnāt that going to restart the app domain??
NOTE: If you are using IIS, there can still be a web.config which can be used to configure IIS settings under the system.webserver section.
AppDomain restarts
This is something that weāve all become familiar with⦠you want to restart your app, just bump/touch the web.config and your app domain is restarted. This is something weāll all have to un-learn. In ASP.Net 5 auto app domain restarts donāt happen. First, there is no web.config (or global.asax for that matter) so there are no files to bump/touch. Next, a big reason why auto app domain restarts canāt occur is because ASP.Net 5 will be able to be run on various different web servers which donāt really know about what it means to restart an app domain. For example if youāve been playing around with vNext before you had a chance to use VS 2015, you might be familiar with the command line āk webā (see docs for details). This command will start up a simple web server: Microsoft.AspNet.Server.WebListener which will serve web requests. In order for app domain restarts to occur, it would need to know how to restart itself after itās been shutdown which isnāt exactly possible with a simple command line process. Instead if you made any changes to your code and wanted to restart your app, youād kill the process (ctrl + c) and just call k web again. Another thing to be aware of is that when you kill a process like this, your app domain does not gracefully shutdown/unwind, itās simply terminated.
But not to worry! If you have a web app that requires restarting (i.e. maybe it installs plugins, etcā¦) and needs to gracefully unwind, itās still possible and actually much more pleasant since youāll be in full control of how/when it happens. In order for this to work youāll need to be running a web server that knows how to start itself back up again - like IIS! The way to gracefully shutdown your app domain is by using: IApplicationShutdown when you want to gracefully shutdown your app. You could even use that in combination with an IFileWatcher and your own configuration files ⦠if you really wanted to mimic an app domain restart by bumping/touching a file.
Deployments, bin folder and App_Code
Speaking of app domain restarts, how will ASP.Net 5 work when I put a new assembly in the /bin folder or add a new class to App_Code?? These are a couple more things that need to be un-learned. There really isnāt a /bin folder anymore (well, there is but it only contains one very special assembly if you are running IIS) and there isnāt any App_Code folder. So where does all of this go?
When you publish a web project in VS 2015 (which uses kpm pack) you end up with a very different looking deployment structure. Thereās two folder: approot and wwwroot.
wwwroot ā is the content of your website, nothing more. Even things like configuration files donāt exist here, itās just content that your webserver can serve.
approot ā this is the brains of your website. It includes all of the binaries, config files, source code, etc⦠that is used to run your website.
Hereās a blog post that describes the deployed file structure
Did you say source code?? Yup! By default kpm pack will deploy your site with all of itās packages and the source code for all of your projects. The Roslyn compiler will take care of everything for you when your site needs to start serving requests. You can of course opt-out of this and have your site deployed as a compiled package.
Did you say Package?? Yup, as in Nuget package! Instead of a /bin folder full of assemblies, all of your dependencies will actually be Nuget references and stored in approot/packages and if you choose to deploy your website without source, it will be compiled into a Nuget package and deployed in the packages folder as well.
More to comeā¦.
So thereās a a few of the things that are pretty different in ASP.Net 5, thereās still more to come and hopefully Iāll find some time to write them all up!