Mads Storm Hansen
Nov 7, 2019
(6 votes)

Introducing Code analyzers for Episerver

Code analyzers for Episerver is a new Roslyn-based plugin that analyzes your Episerver code as you type. It can help you avoid some problems with editor experience and code maintainability.
The plugin will show live warnings ("squiggles") in Visual Studio while you are typing.


Inspired by a recent blog post, Code analyzers for Episerver looks for the correct use of content type and property attributes to ensure a good experience for your editors.

The analyzer rules can be configured individually and phased in gradually in a larger codebase.

Code analyzers for Episerver also looks for the use of known legacy types and 'Internal' namespaces that should be avoided in your code.


Each analyzer rule severity can be configured in a ruleset file similar to Visual Studios built-in code analysis.


Code analyzers for Episerver is installed per-project as a NuGet package from the Episerver feed.

Visual Studio automatically detects and executes the analyzers. Build servers will also execute the analyzer rules on every build.


Code analyzers for Episerver is compatible with the compilers in Visual Studio 2019 and Visual Studio 2017 (15.5+).

If your project references an old version of the Microsoft.Net.Compilers package you may need to upgrade this to 2.6.1+ for compatibility with Code analyzers for Episerver.

Nov 07, 2019


Petter Klang
Petter Klang Nov 7, 2019 08:50 AM


Antti Alasvuo
Antti Alasvuo Nov 7, 2019 04:51 PM

Very nice Mads!

David Knipe
David Knipe Nov 8, 2019 07:20 AM

Very nice! 

Johan Björnfot
Johan Björnfot Nov 20, 2019 10:56 AM

Nice! A nice addition would be an analyzer that detects if you use types from internal namespaces (I have a prototype of such an analyzer in some closet somewhere ;-) ).

Mads Storm Hansen
Mads Storm Hansen Nov 20, 2019 11:44 AM

Thanks Johan. It already detects types from Internal Episerver/Mediachase namespaces.

Latest addition (v1.1) is detecting use of older concrete Order classes (Cart, LineItem etc.) where interfaces are preferred.

linuse Nov 30, 2019 10:32 AM

Nice work Mads - very useful!

Please login to comment.
Latest blogs
New dashboard implemented in CMS UI 12.18.0

As part of the CMS UI 12.18.0 release , a new dashboard has been added as a ‘one stop shop’ to enable editors to access all of their content items,...

Matthew Slim | Mar 28, 2023

How to Merge Anonymous Carts When a Customer Logs In with Optimizely Commerce 14

In e-commerce, it is common for users to browse a site anonymously, adding items to their cart without creating an account. Later, when the user...

Francisco Quintanilla | Mar 27, 2023

How to Write an xUnit Test to Verify Unique Content Type Guids in Content Management

When developing an Optimizely CMS solution, it is important to ensure that each content type has a unique GUID. If two or more content types share...

Minesh Shah (Netcel) | Mar 27, 2023

Extend TinyMCE in Optimizely CMS 12

Since technologies are upgraded to newer versions the ways to extend or override the out-of-the-box functionality are also changed a little bit so...

Ravindra S. Rathore | Mar 27, 2023 | Syndicated blog