Provides support for determining framework versions, IIS version and feature detection.

cadru, .NET, Core, .NETCore, dotnet, dotnetcore, .NETStandard, dotnetstandard, environment, framework, version, detection, iis, features, c-sharp, microsoft, net-core, net-standard, portable
Install-Package Cadru.Environment -Version 5.0.1-preview-1.20467.228


Cadru Build status Join the chat at

What is Cadru?

Cadru is a collection of NuGet packages containing new APIs and extensions to the core .NET Framework to help complete your developer toolbox. It is designed to be cross-platform and targets .NET Standard 2.1.

What's in it?

Cadru is made up of the following packages:


Provides ASP.NET Core middleware and other extensions for request and/response logging.

NuGet downloads NuGet version


Provides additional support for working with ASP.NET Core, such as custom view location expanders, support for IMetadataAware, and rendering enumerated types as SelectLists based on a UiHint attribute, and extensions to make working with state management a bit simpler.

NuGet downloads NuGet version


Provides additional ASP.NET Core TagHelpers.

NuGet downloads NuGet version


Provides additional MSBuild tasks and is used to support assembly-build-versioning.

NuGet downloads NuGet version


Provides a standard implementation for creating and using cache keys.

NuGet downloads NuGet version


Provides additional collection classes and extensions.

NuGet downloads NuGet version


Provides static classes for representing program contracts as preconditions in a way that's compatible with System.Diagnostics.Contracts.

NuGet downloads NuGet version


Provides common extensions and new APIs for the .NET Framework.

NuGet downloads NuGet version


Provides a standard way to read Excel data and fixed width files.

NuGet downloads NuGet version


Provides common data annotation attributes.

NuGet downloads NuGet version


Provides a common database context and predicates for use with Dapper.

NuGet downloads NuGet version


Provides support for determining framework versions, IIS version, and feature detection.

NuGet downloads NuGet version


Additional file providers and support for working with physical files and directories.

NuGet downloads NuGet version


Provides transient error detection strategies for adding retry logic into your HttpClient calls and a UrlBuilder to help simplify building complex URLs.

NuGet downloads NuGet version


Provides access to network information and notification of network status changes.

NuGet downloads NuGet version


Provides support for working with Polly policies, including a strategy for resilient database queries.

NuGet downloads NuGet version


Provides classes for generating email using ASP.NET MVC Razor views.

NuGet downloads NuGet version


Support for creating System for Cross-domain Identity Management (SCIM) filters.

NuGet downloads NuGet version


Provides additional assert capabilities for MS Test.

NuGet downloads NuGet version

The following packages have been retired. They are still available on NuGet, but shouldn't be used.

  • Cadru.TransientFaultHandling - This package has been retired and should be replaced with *Cadru.Polly.
  • Cadru.Net - This package is renamed to *Cadru.Net.Http
  • Cadru.Core.Windows - This package is retired, and features migrated to Cadru.Environment, Cadru.IO, and Cadru.Net.NetworkInformation as appropriate.
  • Cadru.IO - This package will eventually be retired and replaced with Cadru.Extensions.FileProviders.

What's next for Cadru?

The most significant update planned will be support for .NET 5 when it releases in November. Until then, there are a handful of known tasks still left. See the Cadru 5.0 milestone for more details. There are only a few issues in there right now, but I will be adding more over time.

Why another library?

Although Cadru was released as an open source framework in July 2013, some of the APIs it contains were created as early as 2003 and have been used in a variety of real world solutions. These are things that I kept having to rewrite in the apps I was building. Rather than continuing to rewrite them, I decided to encapsulate them in a library and make it broadly available. Although Cadru grew from app development, I have rewritten everything with a focus on being an API rather than a jumbled collection of utilities. That means everything is (hopefully) well documented, cleanly written, and easy to use.


There are also a lot of unit tests that show how to use the APIs which can be a good starting place as well. (My goal is to as be as close to 100% code coverage as possible. Obviously, that will always be a work in progress.)

The long-term goal is to put the documentation online somewhere (probably as wiki pages hosted in the repository), but I don't have a time frame for when that will be complete. Until then, the source code is fully commented using XML documentation comments to provide IntelliSense support in Visual Studio.

Bugs and feature requests

Do you have a bug or a feature request? Please use the issue tracker and search for existing and closed issues. If your problem or request isn't addressed yet, go ahead and open a new issue.


You can also get involved and fork the repository to submit your own pull requests. (More detailed contributor guidelines will be available soon.)


For transparency and to maintain backward compatibility (as much as possible), Cadru uses the Semantic Versioning guidelines.


Copyright and license

Code and documentation copyright 2001-2020 Scott Dorman. Code is licensed under the Microsoft Public License, use it as you wish (but please provide some credit somewhere in your app.) Documentation is released under Creative Commons.