Table of Contents

Class MemberCloner

Namespace
AsmResolver.DotNet.Cloning
Assembly
AsmResolver.DotNet.dll

Provides a mechanism for deep-copying metadata members from external .NET modules into another module.

public class MemberCloner
Inheritance
MemberCloner
Inherited Members

Remarks

When multiple members are cloned in one go, the member cloner will fix up any references between the cloned members. For example, if a type or member is referenced in a method body, and this type or member is also included in the cloning process, the reference will be updated to the cloned member instead of imported.

Constructors

MemberCloner(ModuleDefinition)

Creates a new instance of the MemberCloner class.

public MemberCloner(ModuleDefinition targetModule)

Parameters

targetModule ModuleDefinition

The target module to copy the members into.

MemberCloner(ModuleDefinition, IMemberClonerListener)

Creates a new instance of the MemberCloner class.

public MemberCloner(ModuleDefinition targetModule, IMemberClonerListener listener)

Parameters

targetModule ModuleDefinition

The target module to copy the members into.

listener IMemberClonerListener

The callback listener used in the cloner.

MemberCloner(ModuleDefinition, Action<IMemberDefinition, IMemberDefinition>)

Creates a new instance of the MemberCloner class.

public MemberCloner(ModuleDefinition targetModule, Action<IMemberDefinition, IMemberDefinition> callback)

Parameters

targetModule ModuleDefinition

The target module to copy the members into.

callback Action<IMemberDefinition, IMemberDefinition>

The callback used in the cloner listener.

MemberCloner(ModuleDefinition, Func<MemberCloneContext, CloneContextAwareReferenceImporter>?)

Creates a new instance of the MemberCloner class.

public MemberCloner(ModuleDefinition targetModule, Func<MemberCloneContext, CloneContextAwareReferenceImporter>? importerFactory)

Parameters

targetModule ModuleDefinition

The target module to copy the members into.

importerFactory Func<MemberCloneContext, CloneContextAwareReferenceImporter>

The factory for creating the reference importer

MemberCloner(ModuleDefinition, Func<MemberCloneContext, CloneContextAwareReferenceImporter>?, IMemberClonerListener?)

Creates a new instance of the MemberCloner class.

public MemberCloner(ModuleDefinition targetModule, Func<MemberCloneContext, CloneContextAwareReferenceImporter>? importerFactory, IMemberClonerListener? clonerListener)

Parameters

targetModule ModuleDefinition

The target module to copy the members into.

importerFactory Func<MemberCloneContext, CloneContextAwareReferenceImporter>

The factory for creating the reference importer

clonerListener IMemberClonerListener

The listener used in the cloner.

Properties

FieldRvaCloner

Gets or sets the object responsible for cloning a data segment of a field RVA (initialization data) entry.

public IFieldRvaCloner FieldRvaCloner { get; set; }

Property Value

IFieldRvaCloner

Methods

AddListener(IMemberClonerListener)

Adds a member cloner listener to the cloner.

public MemberCloner AddListener(IMemberClonerListener listener)

Parameters

listener IMemberClonerListener

The listener to add.

Returns

MemberCloner

The metadata cloner that the listener is added to.

AddListener(Action<IMemberDefinition, IMemberDefinition>)

Adds a member cloner listener to the cloner.

public MemberCloner AddListener(Action<IMemberDefinition, IMemberDefinition> listener)

Parameters

listener Action<IMemberDefinition, IMemberDefinition>

The listener to add.

Returns

MemberCloner

The metadata cloner that the listener is added to.

Clone()

Clones all included members.

public MemberCloneResult Clone()

Returns

MemberCloneResult

An object representing the result of the cloning process.

Include(EventDefinition)

Adds a single event to the list of members to clone.

public MemberCloner Include(EventDefinition @event)

Parameters

event EventDefinition

The event to include.

Returns

MemberCloner

The metadata cloner that the event is added to.

Include(EventDefinition, bool)

Adds a single event to the list of members to clone.

public MemberCloner Include(EventDefinition @event, bool recursive)

Parameters

event EventDefinition

The event to include.

recursive bool

Indicates the attached semantic methods (add, remove, fire) should be included.

Returns

MemberCloner

The metadata cloner that the property is added to.

Include(FieldDefinition)

Adds a single field to the list of members to clone.

public MemberCloner Include(FieldDefinition field)

Parameters

field FieldDefinition

The field to include.

Returns

MemberCloner

The metadata cloner that the field is added to.

Include(IMemberDefinition)

Adds the provided member definition to the list of members to clone.

public MemberCloner Include(IMemberDefinition member)

Parameters

member IMemberDefinition

The member to clone.

Returns

MemberCloner

The metadata cloner that this member was added to.

Remarks

If member refers to a TypeDefinition, all nested types will be included as well.

Include(IMemberDefinition, bool)

Adds the provided member definition to the list of members to clone.

public MemberCloner Include(IMemberDefinition member, bool recursive)

Parameters

member IMemberDefinition

The member to clone.

recursive bool

If member refers to a TypeDefinition, indicates whether all nested types should be included as well.

Returns

MemberCloner

The metadata cloner that this member was added to.

Include(params IMemberDefinition[])

Adds each member in the provided collection of member.

public MemberCloner Include(params IMemberDefinition[] members)

Parameters

members IMemberDefinition[]

The members to include.

Returns

MemberCloner

The metadata cloner that the members were added to.

Remarks

If a member in the list is a type, all their members and nested types will be included as well.

Include(MethodDefinition)

Adds a single method to the list of members to clone.

public MemberCloner Include(MethodDefinition method)

Parameters

method MethodDefinition

The method to include.

Returns

MemberCloner

The metadata cloner that the method is added to.

Include(PropertyDefinition)

Adds a single property to the list of members to clone.

public MemberCloner Include(PropertyDefinition property)

Parameters

property PropertyDefinition

The property to include.

Returns

MemberCloner

The metadata cloner that the property is added to.

Include(PropertyDefinition, bool)

Adds a single property to the list of members to clone.

public MemberCloner Include(PropertyDefinition property, bool recursive)

Parameters

property PropertyDefinition

The property to include.

recursive bool

Indicates the attached semantic methods (getters and setters) should be included.

Returns

MemberCloner

The metadata cloner that the property is added to.

Include(TypeDefinition)

Adds the provided type, and all its members and nested types, to the list of members to clone.

public MemberCloner Include(TypeDefinition type)

Parameters

type TypeDefinition

The type to include.

Returns

MemberCloner

The metadata cloner that this type was added to.

Include(TypeDefinition, bool)

Adds the provided type, and all its members, to the list of members to clone.

public MemberCloner Include(TypeDefinition type, bool recursive)

Parameters

type TypeDefinition

The type to include.

recursive bool

Indicates whether all nested types should be included as well.

Returns

MemberCloner

The metadata cloner that this type was added to.

Include(params TypeDefinition[])

Adds each type in the provided collection of types, and all their members and nested types, to the list of members to clone.

public MemberCloner Include(params TypeDefinition[] types)

Parameters

types TypeDefinition[]

The types to include.

Returns

MemberCloner

The metadata cloner that the types were added to.

Include(IEnumerable<IMemberDefinition>)

Adds each member in the provided collection of member.

public MemberCloner Include(IEnumerable<IMemberDefinition> members)

Parameters

members IEnumerable<IMemberDefinition>

The members to include.

Returns

MemberCloner

The metadata cloner that the members were added to.

Remarks

If a member in the list is a type, all their members and nested types will be included as well.

Include(IEnumerable<TypeDefinition>)

Adds each type in the provided collection of types, and all their members and nested types, to the list of members to clone.

public MemberCloner Include(IEnumerable<TypeDefinition> types)

Parameters

types IEnumerable<TypeDefinition>

The types to include.

Returns

MemberCloner

The metadata cloner that the types were added to.