The Wayback Machine - https://web.archive.org/web/20190312053748/https://github.com/jbevain/cecil/wiki/HOWTO
Skip to content
jbevain edited this page Apr 4, 2011 · 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)
            continue;

        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)
            continue;

        result = attribute;
        return true;
    }

    return false;
}

For a type defined as:

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

Usage:

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);
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.