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
dev
. - Any commits will build and be tested in release mode by
GitHub Actions
. - Merge to
master
will triggerBuild, Test and Publish
to NuGet - You need to setup your NuGet API key as a
GitHub Secret
calledNuGetApiKey
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.
GitHub Actions
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