diff options
author | AnakinSklavenwalker <Anakin@gmx-topmail.de> | 2021-04-24 00:46:14 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-24 00:46:14 +0300 |
commit | 634a37d3f2be7b8c72a612fce7b4907a12533d4c (patch) | |
tree | bca0f06f2667ef0873e8669d4e3ead6aa0c50f33 /Mono.Cecil | |
parent | 7b8ee049a151204997eecf587c69acc2f67c8405 (diff) |
Fix resolving from a ModuleReference (#730)
* add failing test
* Fix resolving from netmodules
Co-authored-by: Jb Evain <jb@evain.net>
Diffstat (limited to 'Mono.Cecil')
-rw-r--r-- | Mono.Cecil/AssemblyReader.cs | 8 | ||||
-rw-r--r-- | Mono.Cecil/AssemblyWriter.cs | 6 | ||||
-rw-r--r-- | Mono.Cecil/MetadataResolver.cs | 3 |
3 files changed, 11 insertions, 6 deletions
diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index 2a59358..d5b34b7 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -182,7 +182,7 @@ namespace Mono.Cecil { ReadCustomAttributes (module); var assembly = module.Assembly; - if (assembly == null) + if (module.kind == ModuleKind.NetModule || assembly == null) return; ReadCustomAttributes (assembly); @@ -667,8 +667,10 @@ namespace Mono.Cecil { AssemblyResolver = module.AssemblyResolver }; - modules.Add (ModuleDefinition.ReadModule ( - GetModuleFileName (name), parameters)); + var netmodule = ModuleDefinition.ReadModule (GetModuleFileName (name), parameters); + netmodule.assembly = this.module.assembly; + + modules.Add (netmodule); } return modules; diff --git a/Mono.Cecil/AssemblyWriter.cs b/Mono.Cecil/AssemblyWriter.cs index 4fc264d..200410e 100644 --- a/Mono.Cecil/AssemblyWriter.cs +++ b/Mono.Cecil/AssemblyWriter.cs @@ -94,7 +94,7 @@ namespace Mono.Cecil { if (module.symbol_reader != null) module.symbol_reader.Dispose (); - var name = module.assembly != null ? module.assembly.Name : null; + var name = module.assembly != null && module.kind != ModuleKind.NetModule ? module.assembly.Name : null; var fq_name = stream.value.GetFileName (); var timestamp = parameters.Timestamp ?? module.timestamp; var symbol_writer_provider = parameters.SymbolWriterProvider; @@ -1018,7 +1018,7 @@ namespace Mono.Cecil { var assembly = module.Assembly; - if (assembly != null) + if (module.kind != ModuleKind.NetModule && assembly != null) BuildAssembly (); if (module.HasAssemblyReferences) @@ -1035,7 +1035,7 @@ namespace Mono.Cecil { BuildTypes (); - if (assembly != null) { + if (module.kind != ModuleKind.NetModule && assembly != null) { if (assembly.HasCustomAttributes) AddCustomAttributes (assembly); diff --git a/Mono.Cecil/MetadataResolver.cs b/Mono.Cecil/MetadataResolver.cs index 630ec8a..6511b41 100644 --- a/Mono.Cecil/MetadataResolver.cs +++ b/Mono.Cecil/MetadataResolver.cs @@ -115,6 +115,9 @@ namespace Mono.Cecil { case MetadataScopeType.ModuleDefinition: return GetType ((ModuleDefinition) scope, type); case MetadataScopeType.ModuleReference: + if (type.Module.Assembly == null) + return null; + var modules = type.Module.Assembly.Modules; var module_ref = (ModuleReference) scope; for (int i = 0; i < modules.Count; i++) { |