ltrzesniewski / InlineIL.Fody

Inject arbitrary IL code at compile time.
MIT License
240 stars 17 forks source link

Unable to read an internal field #33

Closed ocoanet closed 1 month ago

ocoanet commented 1 month ago

I have the following error when trying to compile a method that references an internal field:

Error  : Fody: An unhandled exception occurred:
Exception:
Member 'Microsoft.Diagnostics.Tracing.TraceEventNativeMethods/EVENT_RECORD' is declared in another module and needs to be imported
Type:
System.ArgumentException
StackTrace:
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2269
   at Mono.Cecil.SignatureWriter.MakeTypeDefOrRefCodedRID(TypeReference type) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2747
   at Mono.Cecil.SignatureWriter.WriteTypeSignature(TypeReference type) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2824
   at Mono.Cecil.SignatureWriter.WriteTypeSignature(TypeReference type) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2792
   at Mono.Cecil.MetadataBuilder.GetFieldSignature(FieldReference field) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2129
   at Mono.Cecil.MetadataBuilder.GetMemberRefSignature(MemberReference member) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2144
   at Mono.Cecil.MetadataBuilder.CreateMemberRefRow(MemberReference member) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2026
   at Mono.Cecil.MetadataBuilder.GetMemberRefToken(MemberReference member) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2015
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 2287
   at Mono.Cecil.Cil.CodeWriter.WriteOperand(Instruction instruction) in C:\projects\fody\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 270
   at Mono.Cecil.Cil.CodeWriter.WriteInstructions() in C:\projects\fody\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 180
   at Mono.Cecil.Cil.CodeWriter.WriteResolvedMethodBody(MethodDefinition method) in C:\projects\fody\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 118
   at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition method) in C:\projects\fody\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 54
   at Mono.Cecil.MetadataBuilder.AddMethod(MethodDefinition method) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1680
   at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1673
   at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1473
   at Mono.Cecil.MetadataBuilder.AddTypes() in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1445
   at Mono.Cecil.MetadataBuilder.BuildTypes() in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1294
   at Mono.Cecil.MetadataBuilder.BuildModule() in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1064
   at Mono.Cecil.MetadataBuilder.BuildMetadata() in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 1034
   at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder, MetadataReader _) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 147
   at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func`3 read) in C:\projects\fody\cecil\Mono.Cecil\ModuleDefinition.cs:line 971
   at Mono.Cecil.ModuleWriter.BuildMetadata(ModuleDefinition module, MetadataBuilder metadata) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 146
   at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 119
   at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in C:\projects\fody\cecil\Mono.Cecil\AssemblyWriter.cs:line 78
   at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters) in C:\projects\fody\cecil\Mono.Cecil\ModuleDefinition.cs:line 1160
   at InnerWeaver.WriteModule() in C:\projects\fody\FodyIsolated\ModuleWriter.cs:line 17
   at InnerWeaver.Execute() in C:\projects\fody\FodyIsolated\InnerWeaver.cs:line 108
Source:
Mono.Cecil
TargetSite:
Mono.Cecil.MetadataToken LookupToken(Mono.Cecil.IMetadataTokenProvider)

It is probably a configuration problem related to my usage, but I could not find anything related to module imports in Fody configuration.

Here is a simple repro:

ltrzesniewski commented 1 month ago

Oops 🙂

Please try v1.9.0-pre3 (it will be available in a minute). It should fix the issue, but I'll need to see if further changes are needed and write a better test.

ocoanet commented 1 month ago

Awesome, thank you!