diff --git a/AssemblyUnhollower/Contexts/RewriteGlobalContext.cs b/AssemblyUnhollower/Contexts/RewriteGlobalContext.cs index de1c5d48..fe1f5b2d 100644 --- a/AssemblyUnhollower/Contexts/RewriteGlobalContext.cs +++ b/AssemblyUnhollower/Contexts/RewriteGlobalContext.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using AssemblyUnhollower.Extensions; @@ -5,7 +6,7 @@ namespace AssemblyUnhollower.Contexts { - public class RewriteGlobalContext + public class RewriteGlobalContext : IDisposable { public UnhollowerOptions Options { get; } private readonly Dictionary myAssemblies = new Dictionary(); @@ -33,7 +34,7 @@ public RewriteGlobalContext(UnhollowerOptions options, IEnumerable sourc var assemblyName = Path.GetFileNameWithoutExtension(sourceAssemblyPath); if(assemblyName == "Il2CppDummyDll") continue; - var sourceAssembly = AssemblyDefinition.ReadAssembly(File.OpenRead(sourceAssemblyPath), new ReaderParameters(ReadingMode.Immediate) {MetadataResolver = metadataResolver}); + var sourceAssembly = AssemblyDefinition.ReadAssembly(sourceAssemblyPath, new ReaderParameters(ReadingMode.Immediate) {MetadataResolver = metadataResolver}); myAssemblyResolver.Register(sourceAssembly); var newAssembly = AssemblyDefinition.CreateAssembly( new AssemblyNameDefinition(sourceAssembly.Name.Name.UnSystemify(), sourceAssembly.Name.Version), @@ -80,5 +81,14 @@ public AssemblyRewriteContext GetAssemblyByName(string name) { return myAssemblies.TryGetValue(name, out var result) ? result : null; } + + public void Dispose() + { + foreach (var assembly in Assemblies) + { + assembly.NewAssembly.Dispose(); + assembly.OriginalAssembly.Dispose(); + } + } } } \ No newline at end of file diff --git a/AssemblyUnhollower/Program.cs b/AssemblyUnhollower/Program.cs index 0ab068b3..d055670f 100644 --- a/AssemblyUnhollower/Program.cs +++ b/AssemblyUnhollower/Program.cs @@ -228,6 +228,8 @@ public static void Main(UnhollowerOptions options) File.Copy(typeof(Decoder).Assembly.Location, Path.Combine(options.OutputDir, typeof(Decoder).Assembly.GetName().Name + ".dll"), true); Console.WriteLine("Done!"); + + rewriteContext.Dispose(); } } } \ No newline at end of file