mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
using Mono.Cecil;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
|
|
namespace AssetStudio
|
|
{
|
|
public class AssemblyLoader
|
|
{
|
|
public bool Loaded;
|
|
private Dictionary<string, ModuleDefinition> moduleDic = new Dictionary<string, ModuleDefinition>();
|
|
|
|
public void Load(string path)
|
|
{
|
|
var files = Directory.GetFiles(path, "*.dll");
|
|
var resolver = new MyAssemblyResolver();
|
|
var readerParameters = new ReaderParameters();
|
|
readerParameters.AssemblyResolver = resolver;
|
|
try
|
|
{
|
|
foreach (var file in files)
|
|
{
|
|
var assembly = AssemblyDefinition.ReadAssembly(file, readerParameters);
|
|
resolver.Register(assembly);
|
|
moduleDic.Add(assembly.MainModule.Name, assembly.MainModule);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// ignored
|
|
}
|
|
Loaded = true;
|
|
}
|
|
|
|
public TypeDefinition GetTypeDefinition(string assemblyName, string fullName)
|
|
{
|
|
if (moduleDic.TryGetValue(assemblyName, out var module))
|
|
{
|
|
return module.GetType(fullName);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
foreach (var pair in moduleDic)
|
|
{
|
|
pair.Value.Dispose();
|
|
}
|
|
moduleDic.Clear();
|
|
Loaded = false;
|
|
}
|
|
}
|
|
}
|