obfuz/Plugins/dnlib/DotNet/IAssemblyResolver.cs

101 lines
4.4 KiB
C#

// dnlib: See LICENSE.txt for more info
using System.Reflection;
namespace dnlib.DotNet {
/// <summary>
/// Resolves assemblies
/// </summary>
public interface IAssemblyResolver {
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="assembly">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver or
/// <c>null</c> if the assembly couldn't be found.</returns>
AssemblyDef Resolve(IAssembly assembly, ModuleDef sourceModule);
}
public static partial class Extensions {
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="self">this</param>
/// <param name="assembly">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver or
/// <c>null</c> if the assembly couldn't be found.</returns>
public static AssemblyDef Resolve(this IAssemblyResolver self, AssemblyName assembly, ModuleDef sourceModule) {
if (assembly is null)
return null;
return self.Resolve(new AssemblyNameInfo(assembly), sourceModule);
}
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="self">this</param>
/// <param name="asmFullName">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver or
/// <c>null</c> if the assembly couldn't be found.</returns>
public static AssemblyDef Resolve(this IAssemblyResolver self, string asmFullName, ModuleDef sourceModule) {
if (asmFullName is null)
return null;
return self.Resolve(new AssemblyNameInfo(asmFullName), sourceModule);
}
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="self">this</param>
/// <param name="assembly">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver</returns>
/// <exception cref="AssemblyResolveException">If the assembly couldn't be found.</exception>
public static AssemblyDef ResolveThrow(this IAssemblyResolver self, IAssembly assembly, ModuleDef sourceModule) {
if (assembly is null)
return null;
var asm = self.Resolve(assembly, sourceModule);
if (asm is not null)
return asm;
throw new AssemblyResolveException($"Could not resolve assembly: {assembly}");
}
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="self">this</param>
/// <param name="assembly">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver</returns>
/// <exception cref="AssemblyResolveException">If the assembly couldn't be found.</exception>
public static AssemblyDef ResolveThrow(this IAssemblyResolver self, AssemblyName assembly, ModuleDef sourceModule) {
if (assembly is null)
return null;
var asm = self.Resolve(new AssemblyNameInfo(assembly), sourceModule);
if (asm is not null)
return asm;
throw new AssemblyResolveException($"Could not resolve assembly: {assembly}");
}
/// <summary>
/// Finds and returns an <see cref="AssemblyDef"/>
/// </summary>
/// <param name="self">this</param>
/// <param name="asmFullName">The assembly to find</param>
/// <param name="sourceModule">The module that needs to resolve an assembly or <c>null</c></param>
/// <returns>An <see cref="AssemblyDef"/> instance owned by the assembly resolver</returns>
/// <exception cref="AssemblyResolveException">If the assembly couldn't be found.</exception>
public static AssemblyDef ResolveThrow(this IAssemblyResolver self, string asmFullName, ModuleDef sourceModule) {
if (asmFullName is null)
return null;
var asm = self.Resolve(new AssemblyNameInfo(asmFullName), sourceModule);
if (asm is not null)
return asm;
throw new AssemblyResolveException($"Could not resolve assembly: {asmFullName}");
}
}
}