Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions BepInEx.AssemblyPublicizer/AssemblyPublicizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AsmResolver.DotNet" Version="6.0.0-beta.4" />
<PackageReference Include="AsmResolver.DotNet" Version="6.0.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" Private="true"/>
</ItemGroup>
</Project>
8 changes: 6 additions & 2 deletions BepInEx.AssemblyPublicizer/FatalAsmResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@ namespace BepInEx.AssemblyPublicizer;
internal static class FatalAsmResolver
{
/// Same as <see cref="AssemblyDefinition.FromFile(string)"/> 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
Expand Down
31 changes: 0 additions & 31 deletions BepInEx.AssemblyPublicizer/NoopAssemblyResolver.cs

This file was deleted.

8 changes: 4 additions & 4 deletions BepInEx.AssemblyPublicizer/OriginalAttributesAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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);

Expand Down
Loading