Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP


jbevain edited this page · 5 revisions

Open a module and browse its top level types

public void PrintTypes (string fileName)
    ModuleDefinition module = ModuleDefinition.ReadModule (fileName);
    foreach (TypeDefinition type in module.Types) {
        if (!type.IsPublic)

        Console.WriteLine (type.FullName);

Check if a type has a certain custom attribute

public static bool TryGetCustomAttribute (TypeDefinition type,
    string attributeType, out CustomAttribute result)
    result = null;
    if (!type.HasCustomAttributes)
        return false;

    foreach (CustomAttribute attribute in type.CustomAttributes) {
        if (attribute.AttributeType.FullName != attributeType)

        result = attribute;
        return true;

    return false;

For a type defined as:

[Foo.Ignore ("Not working yet")]
public class Fixture {


public static string GetIgnoreReason (TypeDefinition type)
    CustomAttribute ignoreAttribute;
    if (!TryGetCustomAttribute (type, "Foo.IgnoreAttribute", out ignoreAttribute))
        return string.Empty;

   if (ignoreAttribute.ConstructorArguments.Count != 1)
        return string.Empty;

    return (string) ignoreAttribute.ConstructorArguments [0].Value;

Insert an IL instruction before another

This will insert a call to a method reference as the first instruction in a method body:

var processor = method.Body.GetILProcessor();
var newInstruction = processor.Create(OpCodes.Call, someMethodReference);
var firstInstruction = method.Body.Instructions[0];
processor.InsertBefore(firstInstruction, newInstruction);
Something went wrong with that request. Please try again.