Subscribe: Scott Hanselman's Computer Zen
Added By: Feedage Forager Feedage Grade A rated
Language: English
app  application  arduboy  core  docker  don  framework  net core  net framework  net  new  project  run  running  windows 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Scott Hanselman's Computer Zen

Scott Hanselman's Blog

Scott Hanselman on Programming, User Experience, The Zen of Computers and Life in General


Exploring Application Insights for disconnected or connected deep telemetry in ASP.NET Apps

Wed, 19 Oct 2016 07:15:28 GMT

Today on the ASP.NET Community Standup we learned about how you can use Application Insights in a disconnected scenario to get some cool - ahem - insights into your application. Typically when someone sees Application Insights in the File | New Project dialog they assume it's a feature that only works in Azure, that will create some account for you and send your data to the cloud. While App Insights totally does do a lot of cool stuff when you have a cloud-hosted app and it does add a lot of value, it also supports a very useful "SDK only" mode that's totally offline. Click "Add Application Insights to project" and then under "Send telemetry to" you click "Install SDK only" and no data gets sent to the cloud. Once you make your new project, can you learn more about AppInsights here. For ASP.NET Core apps, Application Insights will include this package in your project.json - "Microsoft.ApplicationInsights.AspNetCore": "1.0.0" and it'll add itself into your middleware pipeline and register services in your Startup.cs. Remember, nothing is hidden in ASP.NET Core, so you can modify all this to your heart's content.if (env.IsDevelopment()){ // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. builder.AddApplicationInsightsSettings(developerMode: true);} Request telemetry and Exception telemetry are added separately, as you like. Make sure you show the Application Insights Toolbar by right-clicking your toolbars and ensuring it's checked. The button it adds is actually pretty useful. Run your app and click the Application Insights button. NOTE: I'm using Visual Studio Community. That's the free version of VS you can get at I use it exclusively and I think it's pretty cool that this feature works just great on VS Community. You'll see the Search window open up in VS. You can keep it running while you debug and it'll fill with Requests, Traces, Exceptions, etc. I added a Exceptional case to /about, and here's what I see: I can dig into each issue, filter, search, and explore deeper: And once I've found something interesting, I can explore around it with the full details of the HTTP Request. I find the "telemetry 5 minutes before and after" query to be very powerful. Notice where it says "dependencies for this operation?" That's not dependencies like "Dependency Injection" - that's larger system-wide dependencies like "my app depends on this web service." You can custom instrument your application with the TrackDependancy API if you like, and that will cause your system's dependency to  light up in AppInsights charts and reports. Here's a dumb example as I pretend that putting data in ViewData is a dependency. It should be calling a WebAPI or a Database or something.var telemetry = new TelemetryClient();var success = false;var startTime = DateTime.UtcNow;var timer = System.Diagnostics.Stopwatch.StartNew();try{ ViewData["Message"] = "Your application description page.";}finally{ timer.Stop(); telemetry.TrackDependency("ViewDataAsDependancy", "CallSomeStuff", startTime, timer.Elapsed, success);} Once I'm Tracking external Dependencies I can search for outliers, long durations, categorize them, and they'll affect the generated charts and graphs if/when you do connect your App Insights to the cloud. Here's what I see, after making this one code change. I could build this kind of stuff into all my external calls AND instrument the JavaScript as well. (note Client and Server in this chart.) And once it's all there, I can query all the insights like this: To be clear, though, you don't have to host your app in the cloud. You can just send the telemetry to the cloud for analysis. Your existing on-premises IIS servers can run a "Status Monitor" app for instrumentation. There's a TON of good data here and it's REALLY easy to get started either: Totally offline (no cloud) and just query within Visual Studio Somewhat online - Host your app locally and send telemetry to the cloud To[...]

Learning Arduino the fun way - Writing Games with Arduboy

Tue, 18 Oct 2016 00:01:23 GMT

My kids and I are always tinkering with gadgets and electronics. If you follow me on Instagram you'll notice our adventures as we've built a small Raspberry Pi powered arcade, explored retro-tech, built tiny robots, 3D printed a GameBoy (PiGrrl, in fact), and lots more. While we've done a bunch of small projects with Arduinos, it's fair to say that there's a bit of a gap when one is getting started with Arduino. Arduinos aren't like Raspberry PIs. They don't typically have a screen or boot to a desktop. They are amazing, to be sure, but not everyone lights up when faced with a breadboard and a bunch of wires. The Arduboy is a tiny, inexpensive hardware development platform based on Arduino. It's like a GameBoy that has an Arduino at its heart. It comes exactly as you see in the picture to the right. It uses a micro-USB cable (included) and has buttons, a very bright black and white OLED screen, and a speaker. Be aware, it's SMALL. Smaller than a GameBoy. This is a game that will fit in an 8 year old's pocket. It's definitely-fun sized and kid-sized. I could fit a half-dozen in my pocket. The quick start for the Arduboy is quite clear. My 8 year old and I were able to get Hello World running in about 10 minutes. Just follow the guide and be sure to paste in the custom Board Manager URL to enable support in the IDE for "Arduboy." The Arduboy is just like any other Arduino in that it shows up as a COM port on your Windows machine. You use the same free Arduino IDE to program it, and you utilize the very convenient Arduboy libraries to access sound, draw on the screen, and interact with the buttons. To be clear, I have no relationship with the Arduboy folks, I just think it's a killer product. You can order an Arduboy for US$49 directly from their website. It's available in 5 colors and has these specs: Specs Processor: ATmega32u4 (same as Arduino Leonardo & Micro) Memory: 32KB Flash, 2.5KB RAM, 1KB EEPROM Connectivity: USB 2.0 w/ built in HID profile Inputs: 6 momentary tactile buttons Outputs: 128x64 1Bit OLED, 2 Ch. Piezo Speaker & Blinky LED Battery: 180 mAh Thin-Film Lithium Polymer Programming: Arduino IDE, GCC & AVRDude There's also a friendly little app called Arduboy Manager that connects to an online repository of nearly 50 games and quickly installs them. This proved easier for my 8 year old than downloading the source, compiling, and uploading each time he wanted to try a new game. The best part about Arduboy is its growing community. There's dozens if not hundreds of people learning how to program and creating games. Even if you don't want to program one, the list of fun games is growing every day. The games are all open source and you can read the code while you play them. As an example, there's a little game called CrazyKart and the author says it's their first game! The code is on GitHub. Just clone it (or download a zip file) and open the .ino file into your Arduino IDE. Compile and upload the app while the Arduboy is connected to your computer. The Arduboy holds just one game at a time. Here's Krazy Kart as a gif: Because the Arduboy is so constrained, it's a nice foray into game development for little ones - or any one. The screen is just 128x64 and most games use sprites consisting of 1 bit (just black or white). The Arduboy library is, of course, also open source and includes the primitives that most games will need, as well as lots of examples. You can draw bitmaps, swap frames, draw shapes, and draw characters. We've found the Arduboy to be an ideal on ramp for the kids to make little games and learn basic programming. It's a bonus that they can easily take their games with them and share with their friends. Related Links Programming for Absolute Beginners Getting Started with Robots for kids and children in STEM this holiday season Teaching Children and Kids to Program the Old School Way Teaching Kids Electronics, Computers, and Programming Fundamentals with Snap Circuits Sponsor: Thanks to Redgate this week! Discover the world’s most truste[...]

Exploring ASP.NET Core with Docker in both Linux and Windows Containers

Fri, 14 Oct 2016 20:01:39 GMT

In May of last year doing things with ASP.NET and Docker was in its infancy. But cool stuff was afoot. I wrote a blog post showing how to publish an ASP.NET 5 (5 at the time, now Core 1.0) app to Docker. Later in December of 2015 new tools like Docker Toolbox and Kitematic made things even easier. In May of 2016 Docker for Windows Beta continued to move the ball forward nicely. I wanted to see how things are looking with ASP.NET Core, Docker, and Windows here in October of 2016. I installed these things: Visual Studio Community 2015 Visual Studio 2015 Update 3 ASP.NET Core with .NET Core .NET Core 1.0.1 - VS 2015 Tooling Preview 2 Docker for Windows (I used the Beta Channel) Visual Studio Tools for Docker Docker for Windows is really nice as it automates setting up Hyper-V for you and creates the Docker host OS and gets it all running. This is a big time saver. There's my Linux host that I don't really have to think about. I'll do everything from the command line or from Visual Studio. I'll say File | New Project and make a new ASP.NET Core application running on .NET Core. Then I right click and Add | Docker Support. This menu comes from the Visual Studio Tools for Docker extension. This adds a basic Dockerfile and some docker-compose files. Out of the box, I'm all setup to deploy my ASP.NET Core app to a Docker Linux container. ASP.NET Core in a Docker Linux Container Starting from my ASP.NET Core app, I'll make sure my base image (that's the FROM in the Dockerfile) is the base ASP.NET Core image for Linux.FROM microsoft/aspnetcore:1.0.1ENTRYPOINT ["dotnet", "WebApplication4.dll"]ARG source=.WORKDIR /appEXPOSE 80COPY $source . Next, since I don't want Docker to do the building of my application yet, I'll publish it locally. Be sure to read Steve Lasker's blog post "Building Optimized Docker Images with ASP.NET Core" to learn how to have one docker container build your app and the other run it it. This optimizes server density and resource. I'll publish, then build the images, and run it.>dotnet publish>docker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonlinux >docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEaspnetcoreonlinux latest dab2bff7e4a6 28 seconds ago 276.2 MBmicrosoft/aspnetcore 1.0.1 2e781d03cb22 44 hours ago 266.7 MB>docker run -it -d -p 85:80 aspnetcoreonlinux1cfcc8e8e7d4e6257995f8b64505ce25ae80e05fe1962d4312b2e2fe33420413>docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1cfcc8e8e7d4 aspnetcoreonlinux "dotnet WebApplicatio" 2 seconds ago Up 1 seconds>80/tcp clever_archimedes And there's my ASP.NET Core app running in Docker. So I'm running Windows, running Hyper-V, running a Linux host that is hosting Docker containers. What else can I do? ASP.NET Core in a Docker Windows Container running Windows Nano Server There's Windows Server, there's Windows Server Core that removes the UI among other things and there's Windows Nano Server which gets Windows down to like hundreds of megs instead of many gigs. This means there's a lot of great choices depending on what you need for functionality and server density. Ship as little as possible. Let me see if I can get ASP.NET Core running on Kestrel under Windows Nano Server. Certainly, since Nano is very capable, I could run IIS within the container and there's docs on that. Michael Friis from Docker has a great blog post on building and running your first Docker Windows Server Container. With the new Docker for Windows you can just right click on it and switch between Linux and Windows Containers. So now I'm using Docker with Windows Containers. You may not know that you likely already have Windows Containers! It was shipped inside Windows 10 Anniversary Edition. You can check for Containers in Features: I'll change my Dockerfil[...]

How to reference an existing .NET Framework Project in an ASP.NET Core 1.0 Web App

Sat, 08 Oct 2016 23:51:29 GMT

I had a reader send me a question yesterday. She basically wanted to use her existing .NET Framework libraries in an ASP.NET Core application, and it wasn't super clear how to do it. I have a quick question for you regarding core. We are rewriting our website using core, empty from the bottom up. We have 2 libraries written in .net 4.6 . One is our database model and repositories and the other is a project of internal utilities we use a lot. Unfortunately we cannot see how to reference these two projects in our .net core project. It can be a little confusing. As I mentioned earlier this week, some people don't realize that ASP.NET Core 1.0 (that's the web framework bit) runs on either .NET Core or .NET Framework 4.6 aka "Full Framework." When you make a new web project in Visual Studio you see (today) this dialog. Note in the dropdown at the top you can select your minimum .NET Framework version. You can select 4.6.2, if you like, but I'll do 4.5.2 to be a little more compatible. It's up to you. This dialog could use clearer text and hopefully it will soon. There's the regular ASP.NET Web Application at the top. That's ASP.NET 4.6 with MVC and Web API. It runs on the .NET Framework. There's ASP.NET Core 1.0 running on .NET Core. That's cross platform. If you select that one you'll be able to run your app anywhere but you can't reference "Full" .NET Framework assemblies as they are just for Windows.  If you want to run anywhere you need to use .NET Standard APIs that will run anywhere. There's ASP.NET Core 1.0 running on .NET Framework. That's the new ASP.NET Core 1.0 with unified MVC and Web API but running on the .NET Framework you run today on Windows. As we see in the diagram above, ASP.NET Core 1.0 is the new streamlined ASP.NET  that can run on top of both .NET Framework (Windows) and .NET Core (Mac/Windows/Linux). I'll chose ASP.NET Core on .NET Framework and I'll see this in my Solution Explorer: I've got another DLL that I made with the regular File | New Project | Class Library. Then I reference it the usual way with Add Reference and it looks like this in the References node in Solution Explorer. Note the icon differences. If we look in the project.json (Be aware that this will change for the better in the future when project.json's functionality is merged with csproj and msbuild) you'll note that the ClassLIbrary1 isn't listed under the top level dependencies node, but as a framework specific dependency like this:{ "dependencies": { "Microsoft.StuffAndThings": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1", }, "frameworks": { "net452": { "dependencies": { "ClassLibrary1": { "target": "project" } } } }} Notice also that in this case it's a type="project" dependency in this case as I didn't build a NuGet package and reference that. Since the .NET Core tooling is in preview there are some gotchas when doing this today. Make sure that all your class libraries are targeting an appropriate version of the .NET Framework. For example, don't have a 4.5.2 Web App targeting a 4.6.2 Class Library. This could bite you in subtle ways if things don't line up in production. dotnet restore at the command line may well get confused and give you an error like: Errors in D:\github\WebApplication2\src\WebApplication2\project.json - Unable to resolve 'ClassLibrary1' for '.NETFramework,Version=v4.5.2'. Use Visual Studio to build or run msbuild at the command line. You can restore packages from the command line with nuget.exe version 3.4.4 or greater if you restore on the .sln file like this: D:\github\WebApplication2>nuget restore WebApplication2.slnMSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files (x86)\MSBuild\14.0\bin'. I recommend you run nuget.exe to see what version you have and run nuget update -self to have it update itself. You can also download specific NuGet versions at These [...]

Sharing Authorization Cookies between ASP.NET 4.x and ASP.NET Core 1.0

Sun, 02 Oct 2016 15:53:56 GMT

ASP.NET Core 1.0 is out, as is .NET Core 1.0 and lots of folks are making great cross-platform web apps. These are Web Apps that are built on .NET Core 1.0 and run on Windows, Mac, or Linux. However, some people don't realize that ASP.NET Core 1.0 (that's the web framework bit) runs on either .NET Core or .NET Framework 4.6 aka "Full Framework." Once you realize that it can be somewhat liberating. If you want to check out the new ASP.NET Core 1.0 and use the unified controllers to make web apis or MVC apps with Razor you can...even if you don't need or care about cross-platform support. Maybe your libraries use COM objects or Windows-specific stuff. ASP.NET Core 1.0 works on .NET Framework 4.6 just fine. Another option that folks don't consider when talk of "porting" their apps comes up at work is - why not have two apps? There's no reason to start a big porting exercise if your app works great now. Consider that you can have a section of your site by on ASP.NET Core 1.0 and another be on ASP.NET 4.x and the two apps could share authentication cookies. The user would never know the difference. Barry Dorrans from our team looked into this, and here's what he found. He's interested in your feedback, so be sure to file issues on his GitHub Repo with your thoughts, bugs, and comments. This is a work in progress and at some point will be updated into the official documentation. Sharing Authorization Cookies between ASP.NET 4.x and .NET Core Barry is building a GitHub repro here with two sample apps and a markdown file to illustrate clearly how to accomplish cookie sharing. When you want to share logins with an existing ASP.NET 4.x app and an ASP.NET Core 1.0 app, you'll be creating a login cookie that can be read by both applications. It's certainly possible for you, Dear Reader, to "hack something together" with sessions and your own custom cookies, but please let this blog post and Barry's project be a warning. Don't roll your own crypto. You don't want to accidentally open up one or both if your apps to hacking because you tried to extend auth/auth in a naïve way. First, you'll need to make sure each application has the right NuGet packages to interop with the security tokens you'll be using in your cookies. Install the interop packages into your applications. ASP.NET 4.5 Open the nuget package manager, or the nuget console and add a reference to Microsoft.Owin.Security.Interop. ASP.NET Core Open the nuget package manager, or the nuget console and add a reference to Microsoft.AspNetCore.DataProtection.Extensions. Make sure the Cookie Names are identical in each application Barry is using CookieName = ".AspNet.SharedCookie" in the example, but you just need to make sure they =>{ options.Cookies = new Microsoft.AspNetCore.Identity.IdentityCookieOptions { ApplicationCookie = new CookieAuthenticationOptions { AuthenticationScheme = "Cookie", LoginPath = new PathString("/Account/Login/"), AccessDeniedPath = new PathString("/Account/Forbidden/"), AutomaticAuthenticate = true, AutomaticChallenge = true, CookieName = ".AspNet.SharedCookie" }; }) .AddEntityFrameworkStores() .AddDefaultTokenProviders();} Remember the CookieName property must have the same value in each application, and the AuthenticationType (ASP.NET 4.5) and AuthenticationScheme (ASP.NET Core) properties must have the same value in each application. Be aware of your cookie domains if you use them Browsers naturally share cookies between the same domain name. For example if both your sites run in subdirectories under then cookies will automatically be shared. However if your sites run on subdomains a cookie issued to a subdomain will not automatically be sent by the browser to a different subdomain, for example, https:/[...]

Lonely Coding

Fri, 30 Sep 2016 22:20:02 GMT

It's official. I'm a better programmer when I'm pairing with someone. Pair Programming (two people, one keyboard) has been around for at least 20+ years, if not much longer. Usually one person types while another person (paces around and) thinks. It is kind of a "driver and navigator" model. Everyone is different, to be clear, so it's very possible that you are the kind of person who can disappear into a closet for 8 hours and emerge with code, triumphant. I've done this before. Some of my best projects have involved me coding alone and that's fine. However, just has we know that "diverse teams make for better projects," the same is true in my experience when coding on specific problems. Diversity isn't just color and gender, etc, it's as much background, age, personal history, work experience, expertise, programming language of choice, heck, it's even google-ability, and more! How many times have you banged your head against a wall while coding only to have a friend or co-worker find the answer on their first web search? Good pair programming is like that. Those ah-ha moments happen more often and you'll feel more than twice as productive in a pair. In fact, I'm trying to pair for an hour every week remotely. Mark Downie and I have been pairing on DasBlog on and off for a year or so now in fits and starts. It's great. Just last week he and I were trying to crack one problem using regular expressions (yes, then we had two problems) and because there were two of us looking at the code it was solved! Why is pair programming better? Here's a few reasons why I think Pair Programming is very often better. Focus and Discipline - We set aside specific times and we sprint. We don't chat, we don't delete email, we code. And we also code with a specific goal or endpoint in mind. Collective ownership - I feel like we own the code together. I feel less ego about the code. Our hacks are our hacks, and our successes are shared. Personal growth - We mentor each other. We learn and we watch how the other moves around the code. I've learned new techniques, new hotkeys, and new algorithms. Let's talk about the remote aspect of things. I'm remote. I also like to poke around on non-work-related tech on the side, as do many of us. Can I pair program remotely as well? Absolutely. I start with Skype, but I also use Google Hangouts,, TeamViewer, whatever works that day. If you're a remote person on a larger team, consider remote pair programming. If you're an consultant  or perhaps you've left a big corporate job to strike off on your own, you might be lonely. Seriously, ask yourself that hard question. It's no fun to realize or have to declare you're a lonely coder, but I am and I will. I love my job and I love my team but if I go a day or two without seeing another human or spending some serious time on Skype I get really tense. Remote pair programming can really reduce that feeling of lonely coding. I was at a small tech get together in Atlanta a few days ago and I knew that one person there was a singular coder at their small business while another at the table was an emerging college student with an emerging talent. I made a gentle suggestion that maybe they consider pairing up on some side projects and they both lit up. Consider your networks. Are there people you've met at conferences or at local user groups or meetups that might be good remote pairing partners? This might be the missing link for you. It was for me! Do you pair? Do you pair remotely? Let us all know in the comments. * Stock photo purchased from ColorStock - Your customers are diverse, why aren't your stock photos? Sponsor: Big thanks to Telerik for sponsoring the feed this week. Try Kendo UI by Progress: The most complete set of HTML5 UI widgets and JavaScript app tools helping you cut development time.© 2016 Scott Hanselman. All rights reserved.       [...]

FIXED: Xbox One losing TV signal error message with DirectTV

Wed, 28 Sep 2016 18:30:42 GMT

I've got an Xbox One that I love that is connected to a DirectTV HDTV Receiver that I love somewhat less. The setup is quite simple. Since I can control the DirectTV with the Xbox One and we like to switch between Netflix and Hulu and DirectTV we use the Xbox One to control everything. The basic idea is this, which is quite typical with an Xbox One. In theory, it's amazing. However, this doesn't always work. Often you'll turn on the whole system and the Xbox will say "Your TV Signal was lost. Make sure your cable or satellite box is on and plugged into the Xbox." This got so bad in our house that my non-technical spouse was ready to "buy a whole new TV." I was personally blaming the Xbox. It turns out that's an issue of HDMI compliance. The DirectTV and other older cable boxes aren't super awesome about doing things the exact way HDMI like it, and the Xbox is rather picky about HDMI being totally legit. So how do I "clean" or "fix" my HDMI signal from my Cable/Satellite receiver? I took at chance and asked on Reddit and this very helpful user (thanks!) suggested an HDMI splitter. I was surprised but I was ready to try anything so I ordered this 2 port HDMI powered splitter from Amazon for just US$20. ADDING AN HDMI SPLITTED WORKS - TOTALLY SOLVED THE PROBLEM It totally works. The Xbox One now does its "negotiations" with the compliant splitter, not with the Receiver directly and we haven't seen a single problem since. If you have had this problem with your Xbox One then pick up a 2 port HDMI powered splitter and rejoice. This is a high quality splitter than doesn't change the audio signal and still works with HDCP if needed. Thanks internets! Sponsor: Big thanks to Telerik for sponsoring the feed this week. Try Kendo UI by Progress: The most complete set of HTML5 UI widgets and JavaScript app tools helping you cut development time.© 2016 Scott Hanselman. All rights reserved.       [...]

Self-contained .NET Core Applications

Sun, 18 Sep 2016 05:32:55 GMT

Just in case you missed it, .NET is all open source now and .NET Core is a free, open source, cross-platform framework that you can download and start with in <10 minutes. You can get it on Mac, Windows, and a half-dozen Unixes at Take that along with the free, cross-platform Visual Studio Code and you'll be writing C# and F# all over the place. Ok, that said, there's two ways to deploy a .NET Core application. There's FDD and SCD. Since TLAs (three letter acronyms) are stupid, that's Framework-dependent and Self-contained. When .NET Core is installed it ends up in C:\program files\dotnet on Windows, for example. In the "Shared" folder there's a bunch of .NET stuff that is, well, shared. There may be multiple folders, as you can see in my folder below. You can have many and multiple installs of .NET Core. When you're installing your app and its dependencies BUT NOT .NET Core itself, you're dependent on .NET Core already being on the target machine. That's fine for Web Apps or systems with lots of apps, but what if I want to write an app and give it to you as zip or on a USB key and and I just want it to work. I'll include .NET Core as well so the whole thing is a Self Contained Deployment. It will make my "Hello World" application larger than if I was using an existing system-wide install, but I know it'll Just Work because it'll be totally self-contained. If I deploy my app along with .NET Core it's important to remember that I'll be responsible for servicing .NET Core and keeping it up to date. I also need to decide on my target platforms ahead of time. If I want it to run on Windows, Mac, and Linux AND just work, I'll need to include those target platforms and build deployment packages for them. This all makes mostly intuitive sense but it's good to know. I'll take my little app (I'm just using a "dotnet new" app) and I'll modify project.json in a text editor. My app is a .NETCore.App, but it's not going to use the .NET Core platform that's installed. It'll use a local version so I'll remove "type="platform"" from this dependency."frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1" } } } } Next I'll make a runtimes section to specify which ones I want to target. There's a list of ALL the Runtime IDs here."runtimes": { "win10-x64": {}, "osx.10.10-x64": {}, "ubuntu.14.04-x64": {} } After running "dotnet restore" you'll want to build for each of these like this:dotnet build -r win10-x64dotnet build -r osx.10.10-x64dotnet build -r ubuntu.14.04-x64 And then publish release versions after you've tested, etc.dotnet publish -c release -r win10-x64dotnet publish -c release -r osx.10.10-x64dotnet publish -c release -r ubuntu.14.04-x64 Once this is done, I've got my app self-contained in n folders, ready to deploy to whatever systems I want. You can see in the Win10 folder there's my "MYAPPLICATION.exe" (mine is called scd.exe) that can be run, rather than running things like developers do with "dotnet run." There's lots of good documentation about how you can tune and define exactly what gets deployed with your self contained application over at the .NET Core Docs. You can do considerable trimming to .NET Core, and there's talk of that becoming more and more automated in the future, possibly down to the method level. Sponsor: Big thanks to Redgate for sponsoring the feed this week. Discover the world’s most trusted SQL Server comparison tool. Enjoy a free trial of SQL Compare, the industry standard for comparing and deploying SQL Server schemas. © 2016 Scott Hanselman. All rights reserved.       [...]