Whenever I'm looking to put out a new library I find myself configuring everything in repetitively simple ways. The default File -> New Project templates that Visual Studio ships with never quite get it right for my default library topology.
Almost every single thing I build looks like this:
Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 04/05/2020 1:16 PM .github # GitHub actions build scripts d----- 04/05/2020 1:10 PM adr # Architecture decision register d----- 04/05/2020 1:05 PM artifacts # Build outputs d----- 04/05/2020 1:05 PM build # Build scripts d----- 04/05/2020 1:05 PM docs # Documentation markdowns d----- 04/05/2020 1:05 PM lib # Any non-package-managed libs d----- 04/05/2020 1:05 PM samples # Examples and samples d----- 04/05/2020 4:23 PM src # Source code d----- 04/05/2020 4:21 PM test # Tests -a---- 03/09/2019 8:59 PM 5582 .gitignore -a---- 04/05/2020 4:22 PM 1833 LibraryTemplate.sln -a---- 04/05/2020 1:02 PM 1091 LICENSE -a---- 04/05/2020 3:16 PM 546 README.md -a---- 04/05/2020 1:08 PM 0 ROADMAP.md
So I spent the afternoon deep diving into
dotnet templating and creating and publishing a
nuget package to extend .NET new with my default open source project directory layout.
Installation and usage
You can install this template from the command line:
dotnet new -i ElectricHead.CSharpLib
and then can create a new project by calling
dotnet new csghlib --name ElectricHead.MySampleLibrary
Topology and conventions
This layout is designed for trunk based development, against a branch called
dev. Merging to master, triggers publishing.
- Commit work to a branch called
- Any commits will build and be tested in release mode by
- Merge to
Build, Test and Publishto NuGet
- You need to setup your NuGet API key as a
You need to use the csproj to update your SemVer version numbers, but GitHubs auto-incrementing build numbers will be appended to the build parameter in your version number, so discrete builds will always create unique packages.
The assembly description will be set to the SHA of the commit that triggered the package.
Pushing the resulting repository to GitHub will create builds and packages for you as if by magic.
Just be sure to add your NuGet API key to your repositories
Secrets from the
Settings tab, to support publishing to NuGet.org