Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to read an internal field #33

Closed
ocoanet opened this issue Jul 27, 2024 · 2 comments
Closed

Unable to read an internal field #33

ocoanet opened this issue Jul 27, 2024 · 2 comments
Labels
bug Something isn't working
Milestone

Comments

@ocoanet
Copy link

ocoanet commented Jul 27, 2024

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:

  • Add a package reference to Microsoft.Diagnostics.Tracing.TraceEvent
  • Compile the following code
public static class EventRecordReader
{
    public static unsafe nint ReadEventRecord(TraceEvent traceEvent)
    {
        IL.Emit.Ldarg(nameof(traceEvent));
        IL.Emit.Ldfld(FieldRef.Field(typeof(TraceEvent), "eventRecord"));
        IL.Emit.Ret();

        throw IL.Unreachable();
    }
}
@ltrzesniewski ltrzesniewski added the bug Something isn't working label Jul 27, 2024
@ltrzesniewski
Copy link
Owner

ltrzesniewski commented Jul 27, 2024

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.

ltrzesniewski added a commit that referenced this issue Jul 27, 2024
@ocoanet
Copy link
Author

ocoanet commented Jul 27, 2024

Awesome, thank you!

@ltrzesniewski ltrzesniewski added this to the v1.9.0 milestone Jul 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants