diff --git a/src/AsmResolver.DotNet.Dynamic/DynamicMethodDefinition.cs b/src/AsmResolver.DotNet.Dynamic/DynamicMethodDefinition.cs
index 4349d9006..3cb1512b3 100644
--- a/src/AsmResolver.DotNet.Dynamic/DynamicMethodDefinition.cs
+++ b/src/AsmResolver.DotNet.Dynamic/DynamicMethodDefinition.cs
@@ -69,14 +69,30 @@ private MethodSignature ResolveSig(MethodBase methodBase, ModuleDefinition modul
/// The method body.
private static CilMethodBody CreateDynamicMethodBody(MethodDefinition method, object dynamicMethodObj)
{
- if (!(method.Module is SerializedModuleDefinition module))
+ if (method.Module is not SerializedModuleDefinition module)
throw new ArgumentException("Method body should reference a serialized module.");
var result = new CilMethodBody(method);
dynamicMethodObj = DynamicMethodHelper.ResolveDynamicResolver(dynamicMethodObj);
- //Get Runtime Fields
- byte[] code = FieldReader.ReadField(dynamicMethodObj, "m_code")!;
+ // Attempt to get the code field.
+ byte[]? code = FieldReader.ReadField(dynamicMethodObj, "m_code");
+
+ // If it is still null, it might still be set using DynamicILInfo::SetCode.
+ // Find the code stored in the DynamicILInfo if available.
+ if (code is null
+ && FieldReader.TryReadField(dynamicMethodObj, "m_method", out var methodBase)
+ && methodBase is not null
+ && FieldReader.TryReadField(methodBase, "m_DynamicILInfo", out object? dynamicILInfo)
+ && dynamicILInfo is not null)
+ {
+ code = FieldReader.ReadField(dynamicILInfo, "m_code");
+ }
+
+ if (code is null)
+ throw new InvalidOperationException("Dynamic method does not have a CIL code stream.");
+
+ // Get remaining fields.
object scope = FieldReader.ReadField