diff --git a/BepInEx.AssemblyPublicizer/AssemblyPublicizer.cs b/BepInEx.AssemblyPublicizer/AssemblyPublicizer.cs index 424efef..f697311 100644 --- a/BepInEx.AssemblyPublicizer/AssemblyPublicizer.cs +++ b/BepInEx.AssemblyPublicizer/AssemblyPublicizer.cs @@ -13,9 +13,14 @@ public static class AssemblyPublicizer { public static void Publicize(string assemblyPath, string outputPath, AssemblyPublicizerOptions? options = null) { - var assembly = FatalAsmResolver.FromFile(assemblyPath); + var assembly = FatalAsmResolver.FromFile(assemblyPath, createRuntimeContext: false); var module = assembly.ManifestModule ?? throw new NullReferenceException(); - module.MetadataResolver = new DefaultMetadataResolver(NoopAssemblyResolver.Instance); + + var context = new RuntimeContext( + module.OriginalTargetRuntime, + assemblyResolver: NullAssemblyResolver.Instance + ); + context.AddAssembly(assembly); Publicize(assembly, options); module.FatalWrite(outputPath); diff --git a/BepInEx.AssemblyPublicizer/BepInEx.AssemblyPublicizer.csproj b/BepInEx.AssemblyPublicizer/BepInEx.AssemblyPublicizer.csproj index 2e02437..ab8b53e 100644 --- a/BepInEx.AssemblyPublicizer/BepInEx.AssemblyPublicizer.csproj +++ b/BepInEx.AssemblyPublicizer/BepInEx.AssemblyPublicizer.csproj @@ -10,7 +10,7 @@ - + diff --git a/BepInEx.AssemblyPublicizer/FatalAsmResolver.cs b/BepInEx.AssemblyPublicizer/FatalAsmResolver.cs index 3afce03..0dce5ac 100644 --- a/BepInEx.AssemblyPublicizer/FatalAsmResolver.cs +++ b/BepInEx.AssemblyPublicizer/FatalAsmResolver.cs @@ -14,9 +14,13 @@ namespace BepInEx.AssemblyPublicizer; internal static class FatalAsmResolver { /// Same as but throws only on fatal errors - public static AssemblyDefinition FromFile(string filePath) + public static AssemblyDefinition FromFile(string filePath, bool createRuntimeContext) { - return AssemblyDefinition.FromImage(PEImage.FromFile(filePath), new ModuleReaderParameters(FatalThrowErrorListener.Instance)); + return AssemblyDefinition.FromImage( + PEImage.FromFile(filePath), + new ModuleReaderParameters(FatalThrowErrorListener.Instance), + createRuntimeContext + ); } private sealed class FatalThrowErrorListener : IErrorListener diff --git a/BepInEx.AssemblyPublicizer/NoopAssemblyResolver.cs b/BepInEx.AssemblyPublicizer/NoopAssemblyResolver.cs deleted file mode 100644 index 09b78da..0000000 --- a/BepInEx.AssemblyPublicizer/NoopAssemblyResolver.cs +++ /dev/null @@ -1,31 +0,0 @@ -using AsmResolver.DotNet; - -namespace BepInEx.AssemblyPublicizer; - -internal class NoopAssemblyResolver : IAssemblyResolver -{ - internal static NoopAssemblyResolver Instance { get; } = new(); - - public AssemblyDefinition? Resolve(AssemblyDescriptor assembly) - { - return null; - } - - public void AddToCache(AssemblyDescriptor descriptor, AssemblyDefinition definition) - { - } - - public bool RemoveFromCache(AssemblyDescriptor descriptor) - { - return false; - } - - public bool HasCached(AssemblyDescriptor descriptor) - { - return false; - } - - public void ClearCache() - { - } -} diff --git a/BepInEx.AssemblyPublicizer/OriginalAttributesAttribute.cs b/BepInEx.AssemblyPublicizer/OriginalAttributesAttribute.cs index 37b36b1..c49d08a 100644 --- a/BepInEx.AssemblyPublicizer/OriginalAttributesAttribute.cs +++ b/BepInEx.AssemblyPublicizer/OriginalAttributesAttribute.cs @@ -24,8 +24,8 @@ internal class OriginalAttributesAttribute public OriginalAttributesAttribute(ModuleDefinition module) { var corLibScope = module.CorLibTypeFactory.CorLibScope; - var attributeReference = corLibScope.CreateTypeReference("System", "Attribute").ImportWith(module.DefaultImporter); - var baseConstructorReference = attributeReference.CreateMemberReference(".ctor", MethodSignature.CreateInstance(module.CorLibTypeFactory.Void)).ImportWith(module.DefaultImporter); + var attributeReference = corLibScope.CreateTypeReference("System", "Attribute"); + var baseConstructorReference = attributeReference.CreateMemberReference(".ctor", MethodSignature.CreateInstance(module.CorLibTypeFactory.Void)); Type = new TypeDefinition( "BepInEx.AssemblyPublicizer", "OriginalAttributesAttribute", @@ -36,11 +36,11 @@ public OriginalAttributesAttribute(ModuleDefinition module) foreach (var pair in _typeNames) { - var attributesType = _attributesTypes[pair.Key] = corLibScope.CreateTypeReference("System.Reflection", pair.Value).ImportWith(module.DefaultImporter).ToTypeSignature(); + var attributesType = _attributesTypes[pair.Key] = corLibScope.CreateTypeReference("System.Reflection", pair.Value).ToTypeSignature(isValueType: true); var constructorDefinition = new MethodDefinition(".ctor", MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RuntimeSpecialName | MethodAttributes.Public, - MethodSignature.CreateInstance(module.CorLibTypeFactory.Void, attributesType) + MethodSignature.CreateInstance(module.CorLibTypeFactory.Void, [attributesType]) ); Type.Methods.Add(constructorDefinition);