Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.


Chat on Gitter NuGet Status

Change all members to virtual.

This is an add-in for Fody

It is expected that all developers using Fody become a Patron on OpenCollective. See Licensing/Patron FAQ for more information.


See also Fody usage.

NuGet installation

Install the Virtuosity.Fody NuGet package and update the Fody NuGet package:

PM> Install-Package Fody
PM> Install-Package Virtuosity.Fody

The Install-Package Fody is required since NuGet always defaults to the oldest, and most buggy, version of any dependency.

Add to FodyWeavers.xml

Add <Virtuosity/> to FodyWeavers.xml


What it actually does to your assembly

Selects all members that meet the following criteria

  • from non sealed classes
  • non static members
  • non abstract members
  • non private members
  • non virtual members

Change them to virtual

For all (now virtual) members

  • change calls to those members to virtual
  • change new modifiers to override modifiers

Configuration Options

Exclude types with an Attribute

To exclude a specific class you can mark it with a DoNotVirtualizeAttribute.

Add the below class to your assembly. Namespace does not matter.

public class DoNotVirtualizeAttribute : Attribute

The class will look like this

public class ClassToSkip

Include or exclude namespaces

These config options are access by modifying the Virtuosity node in FodyWeavers.xml


A list of namespaces to exclude.

Can not be defined with IncludeNamespaces.

Can take two forms.

As an element with items delimited by a newline.


Or as a attribute with items delimited by a pipe |.

<Virtuosity ExcludeNamespaces='Foo|Bar'/>


A list of namespaces to include.

Can not be defined with ExcludeNamespaces.

Can take two forms.

As an element with items delimited by a newline.


Or as a attribute with items delimited by a pipe |.

<Virtuosity IncludeNamespaces='Foo|Bar'/>

Why is this useful

When using one of the following tools

All these tools make use of DynamicProxy. DynamicProxy allows for runtime interception of members. The one caveat is that all intercepted members must be virtual. This means that that all the above tools, to some extent, require members to be virtual.

When a member is not virtual these tools will not work and fail in sometimes very unhelpful ways. So rather than having to remember to use the virtual keyword Virtuosity means members will be virtual by default.


Russian Doll designed by [Simon Child]( Child) from The Noun Project.