Advertisement
closer_ex

Untitled

Aug 3rd, 2024 (edited)
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.33 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using System.Security.Permissions;
  5. using HarmonyLib;
  6. using Mono.Cecil;
  7. using UnityEngine;    
  8.  
  9.         internal static void TestAssembly()
  10.         {
  11.             var resolver = new DefaultAssemblyResolver();
  12.             resolver.AddSearchDirectory(Path.Combine(Application.dataPath, "Managed"));
  13.  
  14.             foreach (var mod in ModManager.GetLoadedMods())
  15.             {
  16.                 resolver.AddSearchDirectory(mod.Path);
  17.             }
  18.             AssemblyDefinition assdef_main = AssemblyDefinition.ReadAssembly(Assembly.GetAssembly(typeof(GameManager)).Location, new ReaderParameters() { AssemblyResolver = resolver });
  19.             var workingAssembly = AssemblyDefinition.CreateAssembly(new AssemblyNameDefinition( "TestAssembly",
  20.                                                                                                 new Version(0, 0, 0, 0)),
  21.                                                                                                 "TestAssembly.dll",
  22.                                                                                                 new ModuleParameters()
  23.                                                                                                 {
  24.                                                                                                     Kind = ModuleKind.Dll,
  25.                                                                                                     AssemblyResolver = resolver,
  26.                                                                                                     Architecture = TargetArchitecture.I386,
  27.                                                                                                     Runtime = TargetRuntime.Net_4_0
  28.                                                                                                 });
  29.             workingAssembly.MainModule.Attributes = assdef_main.MainModule.Attributes;
  30.             workingAssembly.MainModule.Characteristics = assdef_main.MainModule.Characteristics;
  31.             //write security attributes so that calling non-public patch methods from this assembly is allowed
  32.             Mono.Cecil.SecurityAttribute sattr_permission = new Mono.Cecil.SecurityAttribute(workingAssembly.MainModule.ImportReference(typeof(SecurityPermissionAttribute)));
  33.             Mono.Cecil.CustomAttributeNamedArgument caarg_SkipVerification = new Mono.Cecil.CustomAttributeNamedArgument(nameof(SecurityPermissionAttribute.SkipVerification), new CustomAttributeArgument(workingAssembly.MainModule.TypeSystem.Boolean, true));
  34.             sattr_permission.Properties.Add(caarg_SkipVerification);
  35.             SecurityDeclaration sdec = new SecurityDeclaration(Mono.Cecil.SecurityAction.RequestMinimum);
  36.             sdec.SecurityAttributes.Add(sattr_permission);
  37.             workingAssembly.SecurityDeclarations.Add(sdec);
  38.  
  39.             var mtdref_start_holding = workingAssembly.MainModule.ImportReference(AccessTools.Method(typeof(ItemActionRanged), nameof(ItemActionRanged.StartHolding)));
  40.             Log.Out($"before resolve: {mtdref_start_holding.FullName}");
  41.             var mtddef_start_holding = mtdref_start_holding.Resolve();
  42.             Log.Out($"after resolve: {mtddef_start_holding.FullName}");
  43.  
  44.             resolver.Dispose();
  45.             workingAssembly.Dispose();
  46.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement