Skip to content

"dotnet new" templates for building NuGet-published (content-only) multi-targeting libraries with all the bells and whistles

License

Notifications You must be signed in to change notification settings

dennisdoomen/dotnet-package-templates

Repository files navigation


.NET Library Package Templates

"dotnet new" templates for building NuGet-published multi-targeting libraries with all the bells and whistles

About

What's this?

A bunch of dotnet new templates to quickly get you started building high-quality libraries including everything you need to publish it on NuGet or make it available as open-source.

It includes:

  • Multi-targeting to cover as many .NET frameworks as possible
  • Code coverage using Coverlet and Coveralls.io
  • Static code analysis using Roslyn analyzers StyleCopAnalyzers, Roslynator, CSharpGuidelinesAnalyzer and Meziantou.
  • Auto-formatting using .editorconfig and settings honored by JetBrains Rider and ReSharper
  • A Nuke C# build script that you can run locally as well as in your CI/CD pipeline
  • A GitHub Actions workflow that builds, tests, packages and publishes your library
  • An extensive read-me
  • Automatic versioning using GitVersion and tagging
  • Contribution guidelines
  • Customized release notes templates for GitHub connected to pull requests labels.
  • A test project using xUnit and Fluent Assertions 7
  • Validation of the public API of the library against snapshots using Verify

What's so special about that?

I like to build my software systems in a nicely broken down set of libraries that are easy to maintain, test and deploy based on the Principles Of Successful Package Management. But every time I or the teams I work with need to start a new library or reusable component, we have to scramble so much from other projects, I felt this good fill the gap.

This is the result of years of experience in building in-house and open-source libraries that are used by thousands of developers around the world. I hope it's a great starting point for building your own libraries.

Tip You can also use this as a starting point for a GitHub Template Repository, fork and adapt the repository for your own company, or use it as an organization template in Azure DevOps.

Who created this?

My name is Dennis Doomen and I'm a Microsoft MVP and Principal Consultant at Aviva Solutions with 28 years of experience under my belt. As a software architect and/or lead developer, I specialize in designing full-stack enterprise solutions based on .NET as well as providing coaching on all aspects of designing, building, deploying and maintaining software systems. I'm the author of several open-source projects such as Fluent Assertions, Reflectify, Liquid Projections, and I've been maintaining coding guidelines for C# since 2001.

Contact me through Email, Bluesky, Twitter/X or Mastadon

Download

This repository is available as a NuGet package on https://nuget.org. To install it, use the following command-line:

dotnet new install DotNetLibraryPackageTemplates

How do I use it?

Generating the library skeleton

  1. Create a new directory for your library initialized with Git

  2. Run the following command

    dotnet new class-library-package-solution --name TheNameOfYourAwesomeLibrary

  3. Make the necessary changes to the generated code (see next section)

  4. Commit the changes to your repository into a new commit. Without it, the build script will crash on generating the version number.

  5. Run build.ps1 to build the code, run the tests, and package the library into a NuGet package in the Artifacts directory.

What to do after that

The template makes a lot of assumptions, so after generating the project, there's a couple of things you can tweak.

  • Update the README.md with information about your library
  • Review the guidelines in CONTRIBUTION.md to see if it aligns with how you want to handle contributions
  • Adjust the .NET frameworks this library should target
  • Adjust the namespace
  • Set-up labels in GitHub matching those in the release.yml so you can label pull requests accordingly
  • Alter the coverage service that is being used.
  • Determine if you want to use API verification against snapshots
  • Study the Nuke build.cs file or invoking it through build.ps1 -plan to see how it works
  • See if all dependencies are up-to-date
  • Adjust the funding.yml to allow people to sponsor your project

About API verification

The ApiVerificationTests will generate a .txt file containing a representation (per target framework) of the public API of your library. It's a nice technique to prevent accidentally introducing breaking changes. So, whenever the structure of your API changes compared to the snapshot stored in the ApprovedApi folder, the test will fail. You can then use AcceptApiChanges.ps1 to update the snapshots and make the test succeed again.

Building

To build this repository locally, you need the following:

  • The .NET SDKs for .NET 4.7, 6.0 and 8.0.
  • Visual Studio, JetBrains Rider or Visual Studio Code with the C# DevKit

You can also build, run the unit tests and package the code using the following command-line:

build.ps1

Or, if you have, the Nuke tool installed:

nuke

Also try using --help to see all the available options or --plan to see what the scripts does.

Contributors

Your contributions are always welcome! Please have a look at the contribution guidelines first.

contrib.rocks image

(Made with contrib.rocks)

Versioning

This library uses Semantic Versioning to give meaning to the version numbers. For the versions available, see the tags on this repository.

Credits

This library wouldn't have been possible without the following tools, packages and companies:

Support the project

You may also like

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

"dotnet new" templates for building NuGet-published (content-only) multi-targeting libraries with all the bells and whistles

Resources

License

Stars

Watchers

Forks

Packages

No packages published