A bootstrapper script for the Cake .NET Core Global Tool on Windows
In my previous post, I described how to use Cake.CoreCLR and Cake.Tool versions of Cake to run build scripts on Linux, without requiring Mono. This post acts as a short addendum to that one, by...
View ArticleA bootstrapper script for the Cake .NET Core Global Tool on Alpine using ash
In a previous post, I described how to use Cake.CoreCLR and Cake.Tool versions of Cake to run build scripts on Linux, without requiring Mono. In a follow up post, I provided a PowerShell bootstrapper...
View ArticleMaking my first contribution on SourceForge using Mercurial
In this post I describe my experience of making my first contribution to a project on SourceForge, using the Mercurial version control system. It's sometimes easy to forget there's a world outside of...
View ArticleExploring the new project file, Program.cs, and the generic host in ASP.NET...
In this post I take a look at some of the fundamental pieces of ASP.NET Core 3.0 applications - the .csproj project file and the Program.cs file. I'll describe how they've changed in the default...
View ArticleComparing Startup.cs between the ASP.NET Core 3.0 templates: Exploring...
The .NET Core 3.0 SDK includes many more templates out-of-the-box than previous versions. In this post I compare some of the different templates used by ASP.NET Core 3 apps, and look at some of the new...
View ArticleNew in ASP.NET Core 3: Service provider validation: Exploring ASP.NET Core...
In this post I describe the new "validate on build" feature that has been added to ASP.NET Core 3.0. This can be used to detect when your DI service provider is misconfigured. Specifically, the feature...
View ArticleRunning async tasks on app startup in ASP.NET Core 3.0: Exploring ASP.NET...
In this post I describe how a small change in the ASP.NET Core 3.0 WebHost makes it easier to run asynchronous tasks on app startup using IHostedService. Running asynchronous tasks on app startup. In a...
View ArticleIntroducing IHostLifetime and untangling the Generic Host startup...
In this post I describe how ASP.NET Core 3.0 has been re-platformed on top of the generic host, and some of the benefits that brings. I show a new abstraction introduced in 3.0, IHostLifetime and...
View ArticleNew in ASP.NET Core 3.0: structured logging for startup messages: Exploring...
In this post I describe a small change to the way ASP.NET Core logs messages on startup in ASP.NET Core 3.0. Instead of logging messages directly to the console, ASP.NET Core now uses the logging...
View ArticlePackaging CLI programs into Docker images to avoid dependency hell
In this post, I'm not going to talk about ASP.NET Core for a change. Instead, I'm going to show one way to package CLI tools and their dependencies as Docker images. With a simple helper script, this...
View ArticleRunning .NET Core global tools in non-sdk Docker images
.NET Core global tools are great for providing small pieces of functionality. Unfortunately, they have a few limitations which can occasionally cause issues when you run them. In this post I describe...
View ArticleNew in .NET Core 3.0: local tools: Exploring ASP.NET Core 3.0 - Part 7
In this post I explore the new local tools feature introduced in .NET Core 3.0. I show how to install and run local tools using the dotnet-tools manifest, describe how to work with multiple manifests,...
View ArticleSimplifying the Cake global tool bootstrapper scripts with .NET Core 3 local...
In this post I show how you can simplify your Cake global tool bootstrapper scripts by taking advantage of local tools, introduced in .NET Core 3.0. I described the new local tools feature (introduced...
View ArticleConverting a .NET Standard 2.0 library to .NET Core 3.0: Upgrading to ASP.NET...
This is the first post in a new series on upgrading from ASP.NET Core 2.x to ASP.NET Core 3.0. I'm not going to cover big topics like adding Blazor or gRPC to your apps. Instead I'm going to cover the...
View ArticleIHostingEnvironment vs IHostEnvironment - obsolete types in .NET Core 3.0:...
In this post I describe the differences between various ASP.NET Core types that have been marked as obsolete in .NET Core 3.0. I describe why things have changed, where the replacement types are, and...
View ArticleAvoiding Startup service injection in ASP.NET Core 3: Upgrading to ASP.NET...
In this post I describe one of the changes to Startup when moving from an ASP.NET Core 2.x app to .NET Core 3; you can not longer inject arbitrary services into the Startup constructor. Migrating to...
View ArticleConverting a terminal middleware to endpoint routing in ASP.NET Core 3.0:...
In this post I provide an overview of the new endpoint routing system, and show how you can use it to create "endpoints" that run in response to a given request URL path. I show how to take a terminal...
View ArticleConverting integration tests to .NET Core 3.0: Upgrading to ASP.NET Core 3.0...
In this post I discuss some of the changes you might need to make in integration test code that uses WebApplicationFactory<> or TestServer when upgrading to ASP.NET Core 3.0. One of the biggest...
View Article.NET Core, Docker, and Cultures - Solving a culture issue porting a .NET Core...
This post is part of the third annual C# Advent. Check out the home page for up to 50 C# blog posts in December 2019! In this post I describe an issue I found when porting an ASP.NET Windows...
View ArticleA Quantum Random Number Generator for .NET: The quantum measurement problem...
I've been listening to a lot of Sean Carroll's Mindscape podcast recently, and in a recent episode with Rob Reid he discussed the Everettian or "many-worlds" approach to explaining the measurement...
View Article