mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-18 03:24:15 -04:00
Refactor MonoBehaviour reading
This commit is contained in:
53
AssetStudioUtility/AssemblyLoader.cs
Normal file
53
AssetStudioUtility/AssemblyLoader.cs
Normal file
@ -0,0 +1,53 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user