Blog

Less code is often better

Early in my software engineering career, a senior engineer at Microsoft told me “the best solution is one that requires no new code.” At the time, I thought this was nonsense. Is not my role as a software engineer to write code? Why would writing less or no code be better? More code means more bug fixes, more features, more services, and more tools. So why is more not always better?

Read full post...

Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth

Selecting .NET Core's runtime settings, versions, rollforward policy, and more

.NET Core applications contain a file named <something>.runtimeconfig.json. This file can be used to control a variety of options. Most developers need not be concerned with it because the SDK generates the file, but I think it’s worth understanding. The file can be used to control settings which are not surfaced in Visual Studio, such as automatically running your app on higher .NET Core versions, tuning thread pools and garbage collection, and more.

Read full post...

Deep-dive into .NET Core primitives, part 2: the shared framework

A closer look at Microsoft.AspNetCore.App and common pitfalls

Shared frameworks have been an essential part of .NET Core since 1.0. ASP.NET Core shipped as a shared framework for the first time in 2.1. You may not have noticed if things are working smoothly, but there have been some bumps and ongoing discussion about its design. In this post, I will dive deep into the shared frameworks and talk about some common developer pitfalls.

Read full post...

.NET Core Plugins

Introducing an API for loading .dll files (and their dependencies) as 'plugins'

I recently published a new package for .NET Core developers that want to implement a plugin system. Dynamic assembly loading in .NET Core is difficult to get right. The API in this package wrangles the complexity through a feature called ‘load contexts’. In this post, I’ll walk through problems that motivated the creation of this project, and explain what the API can do. My hope is that this plugin API will let you focus more on writing your app, and put an end to the inevitable mess of creating your own assembly loading code.

Read full post...

Configuring ASP.NET Core, webpack, and hot module replacement (hmr) for fast TypeScript development

This project setup supports browser live-reloading changes to TypeScript files while you develop in ASP.NET Core

Recently, I spent a weekend banging my head against the wall as I tried to figure out how to upgrade a personal project to webpack 4, TypeScript 2.9, and React (used to be AngularJS 1.6). I finally got it all working together – and even got hot module replacement (hmr) working. TL;DR? Checkout the code here: https://github.com/natemcmaster/aspnetcore-webpack-hmr-demo

Read full post...

Enabling code signing with NuGet, Azure Key Vault, and AppVeyor

About 4 weeks ago, I decided to code sign the NuGet packages from my personal open-source projects. I finally succeeded this weekend. When I started, I figured it couldn’t be that hard. In the end, it really isn’t, but it took hours of research to figure out how to tie it all together. In this post, I’ll share the technical details of what it took to enable code signing using Azure Key Vault, AppVeyor, and NuGet for one of my .NET Core projects.

Read full post...

dotnet watch 2.1

It's now a built-in command and it works inside Docker.

.NET Core 2.1 RC1 was released this week. This is the first supported version of the .NET Core CLI which ships dotnet watch as a built-in command. In addition to changing how this tool ships, dotnet-watch 2.1 has a few improvements that make it the best version yet.

Read full post...

.NET Core 2.1 Global Tools

Getting started with creating a .NET Core global tool package. Also, a peek under the hood.

.NET Core 2.1 RC1 was released this week. This is the first supported version of the .NET Core CLI which includes a feature called “.NET Core Global Tools”. This feature provides a simple way to create and share cross-platform console tools. In this post, I’ll go over some of the basics, and then walk though what is going on under the hood. You will need to download .NET Core 2.1 to use this to try this on your own.

Read full post...

Deep-dive into .NET Core primitives: deps.json, runtimeconfig.json, and dll's

Examining the foundations of a .NET Core application

I learned to program with gcc, C++, and vim. When I started working with C# and .NET, clicking the “Start” button in Visual Studio was magical, but also dissatisfying. Dissatisfying – not because I want to write a Makefile – but because I didn’t know what “Start” did. So, I started to dig. In this post, I’ll show the most primitive tools used in .NET Core, and manually create a .NET Core app without the help of Visual Studio. If you’re new to .NET Core and want to peek under the hood, this is a good post for you. If you’re already a .NET Core developer and wonder what *.deps.json or *.runtimeconfig.json files are all about, I’ll cover those, too.

Read full post...

See all posts...

Subscribe via RSS