Notes from the ASP.NET Community Standup – July 5, 2016

This is the next in a series of blog posts that will cover the topics discussed in the ASP.NET Community Standup. The community standup is a short video-based discussion with some of the leaders of the ASP.NET development teams covering the accomplishments of the team on the new ASP.NET Core framework over the previous week. Within 30 minutes, Scott HanselmanDamian EdwardsJon Galloway and an occasional guest or two discuss new features and ask for feedback on important decisions being made by the ASP.NET development teams.

Each week the standup is hosted live on Google Hangouts and the team publishes the recorded video of their discussion to YouTube for later reference. The guys answer your questions LIVE and unfiltered. This is your chance to ask about the why and what of ASP.NET! Join them each Tuesday on live.asp.net where the meeting’s schedule is posted and hosted.

(Note from Jeff:  My apologies for the delay on this one)

This week’s meeting is below:

Community Links

Channel 9 has the video from RedHat DevNation where Scott announced the RTM of ASP.NET Core

Rick Strahl has an in-depth exploration of ASP.NET Core features and a getting-started deep-dive

Stephen Cleary shared his findings when working with .NET and .NET Core versions

Andrew Lock wrote about how to configure URLs for Kestrel and IIS Express in ASP.NET Core

Filip wrote some code for the WebAPIContrib project that enables web pages to be built with razor and served easily

Paul shared his experience upgrading a project to .NET Core 1 RTM

Michael walks through porting a .NET framework library to be compatible with .NET Core

Tomas Janczuk updated his EdgeJS project that allows you to host .NET Core applications inside of a nodeJS project.

Ben Cull wrote about using Entity Framework with class library projects.  Damian gave us a friendly reminder that tooling that supports this type of activity is in preview.

Jonathan Channon showed us how to port OWIN middleware to ASP.NET Core

Dominic Baier updated his security samples for the RTM of ASP.NET Core

Martin Woodward shared some code that demonstrates how to PInvoke on Linux with .NET Core. 

Travis wrote about Autofac and the process to update for RTM

The SignalR team is looking for feedback on their next release, SignalR 2.2.1

Damien updated his samples for using Angular2 with IdentityServer 4

The ASP.NET Monsters chatted with Mads Kristensen about the bundler-minifier

Tianxiang shared a sample that demonstrates how to use webpack and vue

Matias wrote some code to bundle and minify content for ASP.NET Core

Smidge is another option for bundling and minifying, and it has been updated to support RTM

Maxime has some middleware that writes content to disk so that your ASP.NET Core site gets written to disk as static HTML

Katacoda released a course that teaches you how to deploy ASP.NET Core as a docker container

Maher has decompiled the http://dot.net site to show how the tutorials work that the Microsoft team wrote

Adaptive shareed a couple of links that demonstrate an open-sourced real-time trading platform built on ASP.NET Core.  This is a more complex sample to walk through.  http://weareadaptive.com/2016/06/30/reactive-trader-cloud-net-core-series-intro/

Speeding up your ASP.NET Core Deployment to Azure

Damian did a review of the ASP.NET Core deployment that he demonstrated last week and showed how to improve the deployment process.  Last week, it took approximately 12 minutes to deploy the application, and this was considered a “worst case” deployment because it delivered brand new content to the web server.  In subsequent deployments, only the changes would be deployed, but it was still taking six to seven minutes.

Damian showed how there are two drives that support an Azure Web Application – a slow drive and a fast drive.  The slow drive contains the code that persists to Azure blob storage across site restarts, machine moves, and deployments.  The fast drive is local to the machine that hosts the application and is much faster.  He then took us to the Kudu tooling console for his web application that lives at the https://YOURWEBAPPNAME.scm.azurewebsites.net.  From this menu, he navigated to the Debug console and was presented with a console in the browser that he could use to test various elements of the deployment process.

The repository folder on the ‘slow drive’ is where the Kudu process places a copy of the source code that it will compile and deploy to IIS on the ‘fast drive’.  The build scripts that Kudu uses to execute and build your application are found at: https://github.com/projectkudu/KuduScript/tree/master/lib/templates Kudu writes a log file to the site / deployments / SHA / log.log complete with timestamps so that you can measure and monitor a deployment.

Damian showed his work-around for this by moving his compile process from the ‘fast drive’ and he showed us the steps in that process.  He started by navigating to the Application Settings in the Azure Portal for his web application and setting the environment variable “SCM_REPOSITORY_PATH” to a location under the d:\local folder, in his case he set it to d:\local\repository  This instructs Kudu to clone the source of your project to the ‘fast drive’ and do the compilation and build work with the fast drive.  The problem with this is that this compile location will be lost if you restart the web application or the application stops because Azure will deploy a new copy of the application to a new host location.  You can click the button in the Azure portal to sync your source code and then redeploy the application.

This is just a work-around as the teams are working on improving the experience.

Questions

Question: What are the plans for packaging content in NuGet packages?

— The NuGet package spec now supports a contentFiles element that you can use for content.  Check the NuGet blog post ‘ContentFiles Demystified‘ for more details.

Question:  Is there a way to reduce the significant volume of packages that are referenced and added indirectly to my project when I reference netcoreapp in project.json?

— The default project model is a ‘portable project’ which does require and carry all packages for the framework with it.  This happens because you are referencing netcoreapp with type ‘platform’.  This portable model prevents packages the packages from being downloaded and these binaries from being written to your bin folder.

Question:  Is there a way to change Azure Web Apps from using the folder structure “sites/wwwroot/wwwroot”

— You can change the configuration in Application Settings on the Azure portal, but we haven’t tested what happens with that

Question:  Any update on making the ASP.NET Core Module OSS or stand-alone?

— If you are on a server where you just want the module installed, you can use the windows server installer with some command-line additions.  More information about configuring IIS can be found in the ASP.NET Docs  Open sourcing this module is on the roadmap.

Question:  Any update on native compilation?

— No update currently… it is still under investigation

Question:  Will NuGet’s package store global package folder location be available for use in other project models?

— Damian thinks this might be coming as part of the project.json -> csproj update.  You can use this model now with project.json in other project types, and Oren Novotny has instructions on his blog about configuring other projects.

Question:  When can we expect to see performance improvements on compile times?

— Its scheduled as part of the MSBuild work, and that’s where the team is currently focused.

Question:  Are there any plans to bring in-memory compilation back?

— The features we demonstrated previously are still functioning, with compilations written to disk as files are changed, and in-memory compilation isn’t required to achieve the “change cs file and refresh the browser” feature.  It is not as fast as it used to be, and the razor compilation is in-memory.

Question:  Does the MSBuild process have a simple and straightforward way to publish packages from a class library?

— We expect the current features to still be available after the migration, we’re not entirely sure what shape that will take.  More details will be shared as they are available.