Notes from the ASP.NET Community Standup – June 21, 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.

This week’s meeting is below:

According to Damian, Scott Hanselman is out this week on vacation but Mads Kristensen joined us for the standup to discuss some of the cool things coming in the ASP.NET and Web tooling in Visual Studio.

The nightly builds for ASP.NET Core and tooling are available online, and you can use the directions to update your version of ASP.NET Core frameworks and the preview tooling to the latest ‘nightly’ build.  These are builds that came from the ASP.NET CI server that have passed initial tests and are published for additional community testing.

Accomplishments for ASP.NET Team

Microsoft summer interns have started work on the ASP.NET Core runtime team.  One is working on a new piece of middleware to give Url rewriting capabilities.  Think of it as UrlRewrite from IIS or mod_rewrite from Apache, but not fully featured in the first release.  The other intern is working on the MVC team and working with TagHelpers.  Her first assignment is to take all ViewComponents in a project and write a TagHelperProvider to make those components available as TagHelpers.  Several folks have built something similar, and this effort is to deliver an official feature with the framework.

The ASP.NET team is doing validation to prepare for the release and writing documentation in preparation for the release next week.  Additionally, Damian and the other team leaders are doing planning for ASP.NET features to consider over the next 6 months.  The goal for this group is to deliver a high-level roadmap in two weeks.

Community Links

Q+A is available on Gitter at gitter.im/aspnet/home

Damien Bowden is updating his article on Exception Filters and Resource filters for ASP.NET RC2

On Channel 9, Shahed Chowdry shared a video about deploying a web app using ASP.NET Core

Shahed also published a video about developing on a Mac for C# developers

Fiyaz wrote about configuring TypeScript for ASP.NET Core Apps – showing how to use npm + Gulp to configure projects.

Laurent shared some details around free HTTPS certificates for Docker containers

Nitij wrote about Dependency Injection scenarios for ASP.NET MVC

Jalpesh shared some tips about how to create a Rest API with ASP.NET Core

Mehar covered for Jeff last week while he was at some conferences and wrote last week’s notes.  (THANKS MAHER!)

Filip wrote about implementing custom #Load behavior in Roslyn scripting

Dave Glick announced Scripty, a project to provide an alternative to T4 templating

Updates from Mads

There are some updates to the Visual Studio templates for ASP.NET Core and the Yeoman Generators are being updated as well.  The primary change is to remove gulp and npm from the base template when you create a new project.  The tooling is there, you can still add these tools and manage their resources if you would like.

Gulp was primarily used to bundle and minify static content.  Without gulp in the project template, it has been replaced with usage of the Bundler & Minifier extension to do this work.  Damian asked Mads why this change was made, and Mads shared that:

  • Publishing a website takes a long time because npm restore takes a long time
  • As we introduce ASP.NET Core, adding these tools like gulp, npm, and bower were adding to the concept count for new developers
  • Some developers were upset about mixing node and ASP.NET resources
  • Not everyone believes that npm and gulp were the proper tools to solve the minifying problem

Damian went on to describe that the original decision to bundle grunt, then gulp with ASP.NET Core was driven a bit by where  the web community was managing their packages and how they recommended working with their libraries.  Sometimes the team needs to take a step back from changes to re-evaluate and move forward with a best solution.  Some folks really like grunt, others like gulp, and still others prefer to write straight npm scripts.  Mads recommended that folks who want to run npm scripts directly check out the npm task runner extension

Mads then went on to show us how gulp currently bundles (combines JavaScript or CSS files to deliver a single) and minifies (compresses the files) in the ASP.NET RC2 project.  In the new project template, you will be prompted to install the Bundler & Minifier extension if its not already installed.  Mads showed us how this extension can be used to perform the same bundling and minifying tasks in Visual Studio and then in Visual Studio Code.  More details about how this extension is configured and works are available on its home page.  If you have questions about this extension, jump into the discussion on its GitHub repository.

Mads went on to further discuss some future ideas around using the same minifier engine at runtime with a TagHelper to provide a tag that contains the target of the output of the same minifier used at build time.

Questions

Question: What’s the difference between contentRoot and webRoot?

This is an ASP.NET Core concept.  WebRoot is where you put files that will be served static files that will be served by your web server (JS, CSS, Images).  ContentRoot is the folder where files that aren’t served by your webserver but are to be included in your project.

Question: If I have a project named Project1, I’d like the result assembly to be named “Company.Project1”.  How can I do this?

There is a configuration option in buildOptions setting in project.json called outputName that you can use to set this

Question: Will project.json or csproj replace assemblyinfo.cs?

It won’t replace it, but work in conjunction with it just like it does today

Question: Is hosting.json useful for anything other than setting webroot?

No, its no longer used directly by the framework to configure.  You COULD add the feature back in to the WebHostBuilder configuration by specifying it explicitly.

Question: Will EF7 support complex queries like Group By on the database side at RTM?

Unknown, the EF team would know more

Question: The output path for bin and obj for the MusicStore sample is set to the artifacts folder.  The src directory looks cleaner without the bin and obj directories, are there any downsides to this configuration?

This was a dnx configuration, and has been changed back with dotnet CLI.  Damian doesn’t know if this is a problem with Visual Studio now.

Question: Can we add zopfli compression to the bundle and minifier?

The bundle and minifier extension supports a set of configuration for each bundle but does not yet support zopfli.  Damian went on to disclose that there is middleware planned to support serving contents of gzip compressed files after RTM.

Question: Will extensions run natively in future versions of Visual Studio?

Yes and no… some features are integrated into Visual Studio, others are not.

Question: Can you still rename wwwroot?

Yes, it’s a property on the hosting options that are configured on the WebHostBuilder.  Use the “UseWebRoot” method to set the name of the folder you would like to use.

Question: Would it be possible to detect change in files marked as embedded and rebuild project automatically when you RUN?

It should do this currently, and if it is not, that is a bug.  Mads reported that this is fixed in the tooling release coming next week.

Question: Any plans to improve VS html/razor tooling for webcomponents/polymer?

Yes.. We are improving it, there are some items in WebEssentials and they rely on the JavaScript engine bundled with Visual Studio.  No timeline on these updates

Question: Does the ASP.NET team have an opinion of Aurelia?

No, the team has no opinion about client-side code.  Damian recommends that you use what makes you happy and they will not block you from using the client-side tools you like.  Mads chimed in that WebEssentials does have Aurelia support planned.  Similarly, customers were clamoring for a React JSX editor and that code was thrown away in the new VS15 because there’s a new JavaScript editor.

Question: Are MVC Core 1.0 RC2 Views debuggable?

C# debugging should be fixed for the release next week.

Question: Any plans to support inline HTML templates in angular 2 typescript files (intellisense, coloring) in VS2015?

It is available as of VS2015 Update 2

Question: Are you guys still planning on having a FAQ/KB site that was mentioned a few standups back?

(Jeff answering this one…)  Yes!  I have written an initial implementation of this and it is sitting as a pull request for the live.asp.net site.  We need to update the content, as I wrote it a bit ago, but we should be able to publish this soon.

Question: Any improvements for resx files in the next vs version?

No… not at this time

Question: Any thought about SPIN+TURN middleware for webRTC+objectRTC?

No idea… the team is going to start back on SignalR next week.  Damian will spend some time reviewing this for SIgnalR in the future.

Question: Can we enable some of those extra tooling features in .NET Core library projects, like file nesting?

It is on the list for the new csproj system in VS15 with a configuration and convention that can be used

Question: Is it possible to use DataProtection with an encryption key I generated outside of .net?

No idea… you can use the .NET Crypto APIs yourself and test this. Barry Dorrans can help you with this question more than Damian.

Question: Any possibility of deeper nesting (beyond area/controller/action, mayby with extra attribute) without using routing?

We believe you can do this right now with the new AppModel object.  You can also use the ApplicationPaths object to be able to take parts of your MVC application and rebundle this as a NuGet package.  There is not currently a good way to share Views across MVC applications.

Summary

This was the penultimate ASP.NET Community Standup.  When next we meet, the RTM will be available!  Check back on our blog, this blog, on Monday for information about the release.  The team will be back together on Tuesday to talk about it and whats on the road ahead.