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:
Community Links
Muhammed Rehan Saeed responded to comments in this standup last week about his Subresources TagHelper with some updates
Hisham wrote an article about making PO files work with localization in ASP.NET Core
Shannon Deminick shared some content about how to do custom assembly loading with ASP.NET Core
Damien Bod explores secure file downloads using IdentityServer4, Angular 2, and ASP.NET Core
An update to his ASP.NET Core + Angular 2 SPA project template was shared by Shayne Boyer
Security Analyst extraordinaire Barry Dorrans recorded a video with Seth Juarez from Channel 9 discussing ASP.NET Core Authorization
Anthony Chu wrote about implementing Content Security Policy in ASP.NET Core
The ASP.NET Monsters video this week covers getting started with Docker.
Some guy named Hanselman shared his steps for building and running Visual Studio Code on a Raspberry Pi 3
Accomplishments
Damian has been in Building 25 with the ASP.NET Team, CLR Team and other teams working on an integration hackathon to get some of the bits more tightly integrated for ASP.NET Core, .NET Core, and the .NET CLI. The team is next working through Visual Studio tools up and running. Once the team has confidence in what comes out of the hackathon, they can set a schedule for the delivery of the frameworks.
The team is much closer to delivering the new shared framework model that will be the basis for ASP.NET Core applications. By the end of this week, the team hopes to have an initial installer.
Questions and Answers
Question: When will ASP.NET go live?
— No dates yet — the team is close to setting a date
Question: When will the VS Code team introduce debugging for ASP.NET Core?
— A preview was released last week that requires an RC2 nightly build. It is very experimental at this time
Question: Will ASP.NET Full-framework run on Nano Server?
— No, Nano is built with .NET Core and does not support the full framework
Question: With Microsoft acquiring Xamarin, is Mono an officially supported platform for ASP.NET Core?
— No… there is no change as a result of Microsoft acquiring Xamarin
Question: WebHooks are in RC for ASP.NET 4.6, what are the plans for using WebHooks in ASP.NET Core?
— No firm plans yet. The team is focused on delivering webhooks for the full-stack and then will consider ASP.NET Core
Question: The .tfignore thing – is that integrated with the project system and Visual Studio tooling?
— We don’t know the details on this and Scott will follow-up
Question: Are you going to do another round of alphas and beta releases before RC2?
— No.. the next public release will be RC2
Question: When is Barry Dorrans going to get his basic-auth code production ready?
— We don’t expect this to be completed anytime soon….
Question: What is the story with web pages?
— Its on the roadmap for post-RTM. There was a session about some concepts the team is kicking around in the ASP.NET Fall Sessions that you can review on Channel 9.
Question: When will EF be production ready?
— It will be done when ASP.NET Core is done. The team feels that there is an underlying issue that the commenter is looking for help with.
Question: I was working with ASP.NET Core on a Raspberry Pi and it crashes quickly
— You’re probably working with it on Mono and an older version of that framework. It shows the promise of the future and is not currently a focus of the team. The team would probably focus on getting it working on Windows IoT first, and Raspbian later.
Question: Are there any TFM updates happening post RC2?
— The team is trying to prevent any additional TFMs from being created. The new TFMs that are slated to be released with RC2 are:
- netstandard1.x for targeting the .NET Standard framework versions
- dnxcore50 is being replaced by netcoreapp1.0 representing apps built using the .NET Core CLI
You will see that the team is actively using these new TFMs in their code on GitHub
Question: When can I expect my tooling request to be addressed?
— Scott will follow-up with the commenter
Question: XUnit for Core seems a bit hard to get working and unpolished
— The team is using a fork of XUnit for their testing and will work with the XUnit team to get their source updated once the next version of ASP.NET Core and the .NET Core framework is released. The private build of XUnit is available in the ASP.NET GitHub organization.
Question: Where is the place to learn about the .NET Core library, NETCore TFMs and the like? Do I need them if I’m using the full .NET Framework on Windows?
— There are a lot of heavy docs available, nothing in the ‘getting started’ model yet. If you’re working with the full .NET framework on Windows you will have much less to think about than if you are trying to work with .NET Core on any OS.
Question: Can you have WebAPI actions in the same controller as MVC actions? This caused me some problems with routing.
— This should work – the old style verb-based API actions use a shim that brings in a base-class, but it should work.
<added by Jeff>
I ran some quick tests with RC1 and the following controller DOES work with a GET to an API endpoint and a GET to a /Search MVC endpoint
Question: Can we get some sense of actual progress made against the individual subprojects? MVC, EF, .NET Core?
— No, not really.. Damian doesn’t want the meeting to turn into a status report and there is no dashboard currently available for public consumption.
Question: Browserlink appears to be missing and not working?
— It is not yet open-sourced and will be re-introduced at a later time
Question: Why weren’t things like code-contracts, mocking, and testing built from the outset?
— The team is rebuilding the entire stack ad these things are going to be built on top of the the framework that the team has started. Once the framework is done, these can be layered on top.
Question: VS TagHelpers are not showing code completion. Is my install correct?
— There are two things that must be configured properly to enable Visual Studio intellisense for TagHelpers: The Microsoft.AspNet.Tooling.Razor NuGet package must be referenced by your project and the @addTagHelper directive must be used at the top of your view or the top of your _ViewImports file.
Thank you to everyone that tuned in to the live recording and asked questions. The team is always looking forward to hearing for you. Join us on March 22nd at 20:00 UTC, 13:00 ET, 10:00PT or just check the timer at http://live.asp.net for exact time in your timezone as well as a reminder that you can add to your calendar. // // // // // // // // // // // //
// // // // // // // // // // // //
// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i// <![CDATA[ if (typeof(lpcurruser) == ‘undefined’) lpcurruser = ”; if (document.getElementById(‘lpcurruserelt’) && document.getElementById(‘lpcurruserelt’).value != ”) { lpcurruser = document.getElementById(‘lpcurruserelt’).value; document.getElementById(‘lpcurruserelt’).value = ”; } if (typeof(lpcurrpass) == ‘undefined’) lpcurrpass=”; if (document.getElementById(‘lpcurrpasselt’) && document.getElementById(‘lpcurrpasselt’).value != ”) { lpcurrpass = document.getElementById(‘lpcurrpasselt’).value; document.getElementById(‘lpcurrpasselt’).value = ”; } var lploc=”1″;var lponlyfill=null;var link=document.getElementById(“i1668″); if(link&&typeof(g_lpclicked)==”undefined”){if(document.createEventObject){var evt = document.createEventObject();link.fireEvent(“onclick”,evt);}else{var evt2 = document.createEvent(“MouseEvents”);evt2.initMouseEvent(“click”, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);link.dispatchEvent(evt2);}g_lpclicked=1;} if(lploc==3){var pholders=[“idDiv_PWD_UsernameExample”,”idDiv_PWD_PasswordExample”,”i0116_hint”,”i0118_hint”]; for(var i=0;i
0 comments