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 Hanselman, Damian Edwards, Jon 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:
We broke the Build! Actually, Build broke Hanselman and team as they are wiped from a great week at the conference.
Community Links:
Build 2016 Wrap Up on the MSDN WebDev blog – a wrapup article from your wonderful transcriptionist complete with the ASP.NET team’s videos and links to the workshop code from the event. If you didn’t get a chance to see a session you wanted or get into the workshop, GO TO THIS POST because it has all of the ASP.NET goodies from the event. Seriously, stop reading, go now… we’ll save this post for later so you can read it. When you’re done reading it, give it a 5 star rating because Scott asked you to.
Oh.. And I’ve added Jon’s Q+A with the Channel 9 team to this post as well.
An answer to a previous question on the standup that we took to blog form for a complete answer: Dependency Injection in ASP.NET Core Is on the MSDN blog as well.
ASP.NET Monsters this week are covering Donut Hole Caching. The team likes to call this technique ‘Fragment Caching’, but Jon pointed out that its nowhere near as appetizing as donut holes.
Jon shared the link to the code labs from Build. If you didn’t find them in the blog post above, they’re here. The labs should take about 2-3 hours each for four hours.
Rick Anderson and friends completed some documentation on the docs.asp.net site about localization.
Cecil Phillip shared a GitHub repository where he showed how he migrated a WebAPI 2 application to ASP.NET Core.
Marius Schulz published a post about inline routing constraints.
Mike Brind gives us another good post this week, this time about a tool from Stackify called Prefix for application performance monitoring.
Richard Kiene shared some content about running ASP.NET Core on Joyent Triton.
Marcin Zablocki published a post about using Redis HTML cache with ASP.NET Core.
Nicolas Bello Camilletti has two posts about Angular 2 and ASP.NET Core: Routing in Angular 2 and using with the ASP.NET Core APIs.
The Microsoft Edge team had a one day conference on Monday the 4th of April and published a great site about sharing their platform data.
Fanie Reynders has a video and post about how MVC and ASP.NET Core work together. Scott complemented the format of this post for sharing slides, a video recording of the presentation, code, and a text write-up.
Question of the week:
Previously, we used to be able to configure “ASP.NET 5″ builds on Visual Studio team services with this technique. Can we ensure that technique, or something like it, will continue to be supported?
— Yes.. Visual Studio Team Services support is expected to be delivered with RTM.
Accomplishments
Damian is back from a week of vacation and updated us on the current state of the framework development. The ASP.NET team is currently entered “Ask Mode” which is one of the steps in the release process that Microsoft engineering uses. Damian gave us a quick walk-through of those steps:
- Open check-ins and bug fixes
- Tell Mode – engineers are free to check in bug fixes and are expected to tell a central authority about every check in
- Ask Mode – the burden of higher quality fixes is raised, something Microsoft calls the ‘bug bar’ is raised. This is a period of development where new feature development stops and a central authority holds meetings to review changes and bug fixes before release. The engineering team must ask for permission to submit any changes to the code that is being reviewed prior to release.
- Escrow – Named after the older process where the gold disk was written that contained the version that would be shipped to manufacturing and was placed in escrow while final testing was done.
The Core framework is currently in escrow and they are tracking issues to work through the end of their escrow phase. They have not announced a date for their release, but are quite stable right now. The ASP.NET team right now requires all changes to be approved and verified by Damian and Eilon, the development manager. The team is still early in ask mode and are not ready to declare when it will conclude. This is a good milestone to have reached.
Damian indicated that the .NET CLI and installers are in a good state, which is helpful for the ASP.NET framework that now depends on them. With them completed, the ASP.NET team has a stable foundation to focus on. During the Build conference, there was some rumbling about targeting April for RC2 and the team is hoping to hit that. Damian isn’t quite ready to set a date yet, but is hopeful that it will be in April. There are a lot of new concepts in the .NET Core and CLI release, and Damian encourages everyone to check out Scott Hanselman and Scott Hunter’s session at Build on the Future of .NET.
Questions
Question: What can we expect in terms of difficulty of migrating from RC1 to RC2?
There is a document in the works, but not published yet. Among the changes you’ll need to know are minor project structure changes, the Visual Studio tooling will support both versions, a number of APIs had breaking changes. In RC2, the ASP.NET Core application startup process has changed and you will need to configure your project to use this new model. There are tweaks at every layer and you will be impacted.
Question: Will RC2 be fully CLI functional or will it require some DNX configuration?
It will be all CLI, there will be no DNX any longer
Question: For RC1, dnu publish required a manual triggering of gulp tasks. Will this be streamlined in RC2?
In RC1 you could use the scripts section in project.json you could define several tasks to run pre-publish, post-publish, etc. Damian shared the project.json from the live.asp.net site and showed the scripts/pre-publish section and indicated that this feature will continue to be supported in RC2. I have included that section of Damian’s source file here:
"scripts": { "prepublish": [ "npm install", "bower install", "gulp clean", "gulp csslint", "gulp jshint", "gulp min" ] }
Question: Regarding cross-platform: Await/async internally uses i/o compilation ports, which is Windows based. How does that translate in linux/mac with .NET core?
Damian clarified that this statement is not 100% correct. I/O completion ports are a feature of Windows that allows your application when making a Win32 asynchronous I/O call to register for notification of progress changes or completion of that call using an I/O completion port. At that time, you are required to setup and manage the queue to receives that message from Windows. Windows delivers an event notification handle that you can then use to track the status of that call. As an application, you are required to poll those handles to determine the current state of the processes. Damian clarified that the async feature in .NET is only that you have an immediate return of the call and the process will complete and be delivered somewhere else in your call stack, not immediately where it is called.
.NET build a great model on top of this that manages I/O threads for you and those I/O completion ports for you. When you call an async API with the .NET framework, all of these subsystems kick in and manage the Windows processing for you.
To the question: async and await has nothing to do with I/O completion ports itself. On Windows, yes it can and my use this architecture. On Linux there are separate APIs that the .NET framework now uses to deliver this same functionality. To simplify, you could write your own ‘async method’ that returns a task and call Task.SetComplete anywhere else and on any other thread in your application to get the effect without using I/O.
Question: Why is there no up-for-grabs issues on the ASP.NET repository?
At some point many months ago Damian reviewed the issue list to determine what could be labeled up-for-grabs. He believes that the ASP.NET projects are not mature enough to be able to collaborate with community members contributing code for secondary features that are not immediately required. That management of tasks requires additional time investment and a process to manage the pull-requests. The team is not prepared to manage this interaction right now.
Jon suggested that the docs could be marked as up-for-grabs. Damian thinks this is a good idea, and that those items marked with a wrench are items to be built but not necessarily something that the community can take and run with. The depth and detail of these documentation pages is significant and there are full-time team members spending weeks to deliver a single page of documentation. When someone from the team is assigned to build an article and the community can jump in and offer feedback or additional text, this process functions very well.
Question: Is there any plan to distribute .NET CLI through Homebrew?
The team would like to, and they have a PKG. They used to do Homebrew because they depended on Mono and that was easy to do. They probably will.
Question: When would the .NET standard documentation be updated? Especially all of the TFM changes like netstandard and netcoreapp?
There is a doc available on GitHub that the .NET team is actively working on. It’s a hard read, but outlines the direction and current state of things that we are working on.
Question: Did I hear correctly that there are standups for dotnet-cli and dotnet-core?
There are… the On .NET show announces when they are. Scott is planning to help centralize these things, and among them is the centralizing of all URLs. We’d like to see all live broadcasts in one place, and with the team merger we can now do some of those things. Damian chimed in that many of these documentation and public facing interactions with the product are the hard parts that the teams, including Scott’s team, are working on next.
Question: Are there any features in Asp.Net Core that depends on a specific web server? For example the cache flush. If there is do you have a feature matrix showing what server supports what?
Damian knows of only two limitations right now:
- windows authentication requires IIS
- opaque upgrade of a request to a raw tcp connection as a stream is only supported by kestrel
Some features have native implementations on the web server, so they may run better on one server than another.
Question: What’s the plan for SignalR client code?
The current version, 2.2 has a portable class library implementation and a windows implementation. Damian does not think that either will work with .NET Core properly, but porting that code should be trivial. In RC2 there is a feature that allows you to denote which framework you are targeting and to indicate which portable profile you would like the application to attempt to use as well. This is a bit of an ‘escape-hatch’ to allow portable class libraries to work with .NET Core.
Question: There is a lot of MVC Core project samples in the wild but, but I can’t find simple WebApi starter with authentication and authorization. Is there some boilerplate for it?
The team during the standup offered to research this. However, the team is not shipping a token management server like Identity Server and there are some customers who have indicated that they believe Identity Server is too much infrastructure for simple API scenarios. We would like there to be a template in RTM that allows you to build an API project.
Question: Why weren’t there more ASP.NET Core sessions at Build?
This Build conference was different from previous iterations of the conference. Previously, we had many sessions and a number of them were not well attended. This year we had less sessions and more hands-on workshops in response to feedback about wanting more hands-on code time with Microsoft staff available to assist. That change was a spectacular success with three 4-hour courses run over the duration of the event for 108 attendees each time and long lines waiting to get in. The team did not anticipate the significant interest in the labs since this was the first time it was run at Build. We have plans to improve this experience next time, and the lab materials are available on GitHub if you didn’t get a chance to sit in a lab session at Build.
Question: Is anyone working on an ASP.NET Core on Linux book or video series?
Scott and Damian are going to be doing an MVA video series on building ASP.NET Core without Windows or Visual Studio. Jeff Fritz is working on a book, but we don’t know of any others right now. The ASP.NET Monsters are working on a certification book. If you’re working on a book, please get in touch with the team and we can help you with some content.
Question: I’m having problems with immutable collections in .NET Core…
There is not enough detail in the question to answer, and the team knows it works in Roslyn.
Question: Please fix the Microsoft CDN to add the Access-Control-Allow-Origin: * HTTP header. Its only being served for Bootstrap.
Damian will look further into this…
Question: What about an ASP.NET Core Stackoverflow sub-site for questions?
There already is an ASP.NET Core tag on the standard Stackoverflow site.
Question: Is there a vague schedule for certification exams and MVA content? Scott owns the content for MVA and will move on it and have an idea of a schedule once the RC2 ships and we have an idea of the RTM date.
Question: VS2015 Update 2 crashes with long path names due to node_modules
We have not seen this ourselves, but if you can reproduce it and send a set of steps to Scott to follow-up on.
Question: Is there going to be a demo with the current build like there was last week?
Damian would like to do this next week.
Question: Are there messaging libraries like NServiceBus, MassTransit, WindowsAzure.ServiceBus that are ready for .NET Core?
Not yet, the Azure teams are waiting for System.ServiceModel.Syndication to be completed before they start building on top of it. We don’t know about NServiceBus or MassTransit. Damian encourages you to comment on those projects repos asking for .NET Core support.
Question: How do you run commands/scripts from project.json in the new dotnet cli world?
There’s a new tools section in project.json that will allow you to execute tools from within the context of the dotnet cli using commands like “dotnet tools X” You can also use the scripts block to run command-line scripts when project events occur as described and demonstrated in a previous question.
Question: What happens to dnvm in the .NET CLI? Do we need to specifiy all of the frameworks in project.json or is there still some sort of dnvm?
Dnvm is gone in the new .NET CLI. The CLI has baked into it the same features of the dnvm and will automatically execute the correct version of the dotnet tools based on what version of the framework is used in your application. You no longer need to modify your path to manage the set of .NET CLI tools that you are using.
Comment: With all of the questions about RC1 -> RC2 it might be worth mentioning the cli-samples repo…
Yes, the CLI-Samples repository contains some very small samples that contain the minimum needed to get running on the new CLI.
Question: Where is the best place to fun the latest details on how to upgrade from dnx/rc1 to dotnet/rc2?
This is a tough place to be because the team is only producing daily builds and they are not ready to support this workflow yet. They are working on a document to help make this transition easier, but that is not ready at this time. You can look at the GitHub announcements repository for indications of the breaking changes, but there will be a document in the future
Question: Now that Mono has been contributed to the .NET Foundation, how long will it take the .NET Standard Library to become the one library for everything beyond Core?
Very interesting question…we don’t know. The dream is that the .NET Standard library is the one place to get a framework that runs everywhere. In this model you would use the .NET Standard library the same way you reference the BCL today, or you could install a custom NuGet package.
Question: Will the dotnet cli be used for UWP apps down the line?
Don’t know… no reason it couldn’t, but UWP is a much more graphical interaction experience and that fits in very well with Visual Studio and a full IDE experience.
Question: What does the ‘imports’ section do in the frameworks section of project.json? I see that MVC imports portable-net452+win8
This is what Damian was referencing earlier: the ability of a library to define what target framework NuGet could ALSO include libraries that target. In this case, MVC is compiling and including packages that are also compatible with the portable-net452+win8 target framework.
Comment: Build keynotes were way too long and sessions too short. Hundreds turned away from labs. Would have been nice to have something like Wed: All day .NET/Visual Studio; Thur: All day Azure. And not bounce around between locations
Sessions were an hour, they could have been 90 minutes. This is an interesting idea…
Question: I’m asking (about uwp) for features like being able to reference a NuGet or its source easily and things like tools in project.json
This is a Visual Studio feature that Scott Hunter demonstrated last week in the .NET Futures session.
Question: How can I securely authenticate WebAPIs from C# applications?
We’ll take a look at this topic and put together a blog post on the topic
Question: Loved the new docker tooling stuff demoed at build. I’m having a hard time convincing my company’s infrastructure guys it is a good thing, any insights on how to argument that containers are good from a infrastructure point of view?
We have a getting started with docker series coming to this blog in the next week, with a focus on the docker demo from Scott’s ASP.NET Core session.
Question: I’m busy setting up CI in Visual Studio Online. RC1 Update1, DNXCore50 only. Build keeps failing insisting on building CLR and not CoreCLR. WHY?
This is typically based on the TFMs defined in your project.json file or the environment path is misconfigured to grab the wrong packages.
Question: I see a lot of focus on the shared framework approach in tooling and samples. I’m going the other way right now: I’m a standalone cat! I want standalone native when its available. Will it make RTM, or will it be post-RTM?
Native was cut from RTM and will be revisited after the initial release.
Final Note: There was a question on Twitter after the live standup about the appearance of an RC1-update2 version of the framework. What’s the story with this version?
Damian reports that this is a slight tweak to enable to frameworks to work with the Dev15 Preview release of Visual Studio that was announced at Build. No new features or bug fixes are intended for this version.
Summary
Scott questioned whether this shotgun-style approach of random questions was beneficial as we get closer to a public release, or if a more topic-focused session each week would be more beneficial. We’d like to hear your feedback on the topic, please comment in the discussion area below. Some of these questions will come back as blog post topics that are answered by Microsoft developers or program managers. If you see a question that you’d like to explore further, blog it and send us a note about it and we could mention you in the next ASP.NET Community Standup.