Table of Contents

Class AssemblyPool

Namespace
MonkeyLoader
Assembly
MonkeyLoader.dll

Manages a collection of Assemblies and not yet loaded AssemblyDefinitions.
Handles AssemblyResolve events targeting its managed assemblies.

public sealed class AssemblyPool : IAssemblyResolver, IDisposable
Inheritance
AssemblyPool
Implements
Inherited Members

Constructors

AssemblyPool(MonkeyLoader, string, Func<string?>?, bool)

Creates a new AssemblyPool instance, loading assemblies when asked to resolve them if desired.

public AssemblyPool(MonkeyLoader loader, string poolName = "AssemblyPool", Func<string?>? getPatchedAssemblyPath = null, bool loadForResolve = true)

Parameters

loader MonkeyLoader
poolName string
getPatchedAssemblyPath Func<string>

Provides the path where to save patched assemblies. Return null to disable.

loadForResolve bool

Whether to load assemblies when asked to resolve them.

Properties

LoadForResolve

Gets whether assemblies will be loaded when asked to resolve them.

public bool LoadForResolve { get; }

Property Value

bool

Loader

public MonkeyLoader Loader { get; }

Property Value

MonkeyLoader

PatchedAssemblyPath

public string? PatchedAssemblyPath { get; }

Property Value

string

Methods

AddFallbackPool(AssemblyPool)

public bool AddFallbackPool(AssemblyPool pool)

Parameters

pool AssemblyPool

Returns

bool

AddSearchDirectory(string)

public void AddSearchDirectory(string directory)

Parameters

directory string

Dispose()

public void Dispose()

GetAllAsLoadedPackages(string)

public IEnumerable<ILoadedNuGetPackage> GetAllAsLoadedPackages(string optionalPrefix)

Parameters

optionalPrefix string

Returns

IEnumerable<ILoadedNuGetPackage>

GetAssembly(AssemblyName)

Gets the Assembly for an entry without attempting to load it.

public Assembly GetAssembly(AssemblyName name)

Parameters

name AssemblyName

The name of the Assembly to get.

Returns

Assembly

The loaded Assembly if it was loaded already.

Exceptions

InvalidOperationException

When the assembly hasn't been loaded yet.

KeyNotFoundException

When the name doesn't exist in this pool.

LoadAll(string)

Loads all (not yet loaded) Assembly entries.

public void LoadAll(string path)

Parameters

path string

LoadAssembly(AssemblyName)

Gets the Assembly for an entry loading it if necessary.

public Assembly LoadAssembly(AssemblyName name)

Parameters

name AssemblyName

The name of the Assembly to get.

Returns

Assembly

The loaded Assembly.

Exceptions

KeyNotFoundException

When the name doesn't exist in this pool.

LoadDefinition(Stream, ReaderParameters?)

public AssemblyDefinition LoadDefinition(Stream assemblyStream, ReaderParameters? readerParameters = null)

Parameters

assemblyStream Stream
readerParameters ReaderParameters

Returns

AssemblyDefinition

LoadDefinition(string, ReaderParameters?)

public AssemblyDefinition LoadDefinition(string path, ReaderParameters? readerParameters = null)

Parameters

path string
readerParameters ReaderParameters

Returns

AssemblyDefinition

Resolve(AssemblyNameReference)

public AssemblyDefinition Resolve(AssemblyNameReference name)

Parameters

name AssemblyNameReference

Returns

AssemblyDefinition

Resolve(AssemblyNameReference, ReaderParameters)

public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters)

Parameters

name AssemblyNameReference
parameters ReaderParameters

Returns

AssemblyDefinition

RestoreDefinition(AssemblyName)

Restores the AssemblyDefinition for an entry and releases its definition lock.

public void RestoreDefinition(AssemblyName name)

Parameters

name AssemblyName

The entry to restore.

Exceptions

InvalidOperationException

When the entry has already been loaded or returned.

KeyNotFoundException

When the name doesn't exist in this pool.

ReturnDefinition(AssemblyName, AssemblyDefinition)

Sets the given (new) AssemblyDefinition for and entry and releases its definition lock.

public void ReturnDefinition(AssemblyName name, AssemblyDefinition assemblyDefinition)

Parameters

name AssemblyName

The entry to set.

assemblyDefinition AssemblyDefinition

The (new) AssemblyDefinition.

Exceptions

InvalidOperationException

When the entry has already been loaded or returned.

KeyNotFoundException

When the name doesn't exist in this pool.

TryResolve(AssemblyName, out AssemblyDefinition?)

public bool TryResolve(AssemblyName name, out AssemblyDefinition? assemblyDefinition)

Parameters

name AssemblyName
assemblyDefinition AssemblyDefinition

Returns

bool

TryWaitForDefinition(AssemblyName, out AssemblyDefinition?)

Tries to wait until nothing else is modifying the AssemblyDefinition of an entry anymore, before making a snapshot and returning it. The definition has to be returned using RestoreDefinition(AssemblyName) or ReturnDefinition(AssemblyName, AssemblyDefinition) exactly once.

public bool TryWaitForDefinition(AssemblyName name, out AssemblyDefinition? result)

Parameters

name AssemblyName

The entry to get.

result AssemblyDefinition

The entry's AssemblyDefinition or null if it wasn't found or has already been loaded.

Returns

bool

Whether the definition was returned.

WaitForDefinition(AssemblyName)

Waits until nothing else is modifying the AssemblyDefinition of an entry anymore, before making a snapshot and returning it. The definition has to be returned using RestoreDefinition(AssemblyName) or ReturnDefinition(AssemblyName, AssemblyDefinition) exactly once.

public AssemblyDefinition WaitForDefinition(AssemblyName name)

Parameters

name AssemblyName

The entry to get.

Returns

AssemblyDefinition

The entry's AssemblyDefinition.

Exceptions

InvalidOperationException

When the entry has already been loaded.

KeyNotFoundException

When the name doesn't exist in this pool.