Nate McMaster

Software dev & infrequent blogger

Recent Posts

.NET Core Global Tools and Gotchas

Getting started with using or creating a .NET Core global tool package, and how to deal with the gotchas

As announced recently in the .NET Core 2.1 Roadmap, the .NET Core 2.1.300 SDK will add a feature called “.NET Core Global Tools”. This announcement contains a brief snippet of how the tools will work. As this feature is new, there are some rough edges. In this post, I’ll go over the basic design of how global CLI tool should work, some of the gotchas, and how to make it all owrk.

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.

Docker + dotnet-watch

Setup an ASP.NET Core project with Docker and dotnet-watch, without making Visual Studio crash and burn

I made a change to dotnet-watch recently that will make it much easier to setup Docker + dotnet-watch in your ASP.NET Core project, without causing Visual Studio to crash and burn. In current versions of dotnet-watch, there have been issues getting it to work with Docker, and it required some ugly workarounds. Even then, it was hard to keep Docker, dotnet-watch, and Visual Studio happy. Either Docker or Visual Studio would complain about issues with NuGet caches, duplicate attributes, etc. The next version of dotnet-watch removes the need for those ugly workarounds. This version isn’t available yet on, but you can still give it a test run today with ASP.NET Core 2.0.0 projects. The post below shows you how to setup your project to do this today using a nightly build of dotnet-watch.

Bundling .NET build tools in NuGet

How to share your console app via NuGet and MSBuild

If you are looking for a way to share a build tool among several .NET Framework or .NET Core projects, NuGet is an excellent way to distribute it. Starting with Visual Studio 2017, NuGet comes “batteries included” with Microsoft.NET.Sdk (typically for .NET Standard and Core) projects, and can be made to work with “classic” .NET Framework projects, too. Most of the time, NuGet packages are used to share runtime libraries, but NuGet packages can be used for build tools, too. By adding a <PackageReference> to your *.csproj files, you can ensure that the tool is available, and you can even automatically wire it up into the project’s compilation steps.

See more posts...