Skip to content

Conversation

@ColinTimBarndt
Copy link

When importing a field reference where the field declaring type is on module A, but its type is on module B, then writing the assembly A fails because the field reference type is not imported due to a short-circuit clause.

This patch solves Yellow-Dog-Man/Resonite-Issues#5656.

Stack trace from that issue
System.ArgumentException: Member 'FrooxEngine.FieldDrive`1' (Mono.Cecil.TypeDefinition) is declared in another module 'FrooxEngine.dll' and needs to be imported (expected Plugin.Wasm.dll)
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2283
   at Mono.Cecil.SignatureWriter.MakeTypeDefOrRefCodedRID(TypeReference type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2761
   at Mono.Cecil.SignatureWriter.WriteTypeSignature(TypeReference type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2794
   at Mono.Cecil.MetadataBuilder.GetFieldSignature(FieldReference field) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2143
   at Mono.Cecil.MetadataBuilder.GetMemberRefSignature(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2158
   at Mono.Cecil.MetadataBuilder.CreateMemberRefRow(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2040
   at Mono.Cecil.MetadataBuilder.GetMemberRefToken(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2029
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2301
   at Mono.Cecil.Cil.CodeWriter.WriteOperand(Instruction instruction) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 270
   at Mono.Cecil.Cil.CodeWriter.WriteInstructions() in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 180
   at Mono.Cecil.Cil.CodeWriter.WriteResolvedMethodBody(MethodDefinition method) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 111
   at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition method) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 54
   at Mono.Cecil.MetadataBuilder.AddMethod(MethodDefinition method) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1683
   at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1676
   at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1473
   at Mono.Cecil.MetadataBuilder.AddTypes() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1445
   at Mono.Cecil.MetadataBuilder.BuildTypes() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1294
   at Mono.Cecil.MetadataBuilder.BuildModule() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1064
   at Mono.Cecil.MetadataBuilder.BuildMetadata() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1034
   at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder, MetadataReader _) in [...]/Mono.Cecil/AssemblyWriter.cs:line 147
   at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func`3 read) in [...]/Mono.Cecil/ModuleDefinition.cs:line 982
   at Mono.Cecil.ModuleWriter.BuildMetadata(ModuleDefinition module, MetadataBuilder metadata) in [...]/Mono.Cecil/AssemblyWriter.cs:line 146
   at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in [...]/Mono.Cecil/AssemblyWriter.cs:line 119
   at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in [...]/Mono.Cecil/AssemblyWriter.cs:line 78
   at Mono.Cecil.ModuleDefinition.Write(Stream stream, WriterParameters parameters) in [...]/Mono.Cecil/ModuleDefinition.cs:line 1198
   at Mono.Cecil.ModuleDefinition.Write(WriterParameters parameters) in [...]/Mono.Cecil/ModuleDefinition.cs:line 1184
   at Mono.Cecil.AssemblyDefinition.Write(WriterParameters parameters) in [...]/Mono.Cecil/AssemblyDefinition.cs:line 171
   at FrooxEngine.Weaver.AssemblyPostProcessor.Process(String path, String& versionNumber, String frooxEngineModuleRoot) in D:\Workspace\Everion\FrooxEngine\FrooxEngine.Weaver\AssemblyPostProcessor.cs:line 502
   at FrooxEngine.Weaver.AssemblyPostProcessor.Process(String path, String frooxEngineModuleRoot) in D:\Workspace\Everion\FrooxEngine\FrooxEngine.Weaver\AssemblyPostProcessor.cs:line 46
   at FrooxEngine.Engine.ProcessStartupCommands(LaunchOptions options)
   at FrooxEngine.Engine.Initialize(String appPath, Boolean useRenderer, LaunchOptions options, ISystemInfo systemInfo, IEngineInitProgress progress)
   at Renderite.Host.GraphicalClientRunner.Run(LaunchOptions options) in D:\Workspace\Everion\FrooxEngine\GraphicalClient\GraphicalClientRunner.cs:line 115
   at Program.<Main>$(String[] args) in D:\Workspace\Everion\FrooxEngine\GraphicalClient\Program.cs:line 51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant