dotnet/Documentation/compatibility/marshal_sizeof-and-marshal_...

1.8 KiB

Marshal.SizeOf and Marshal.PtrToStructure overloads break dynamic code

Scope

Minor

Version Introduced

4.5.1

Source Analyzer Status

Available

Change Description

Beginning in the .NET Framework 4.5.1, dynamically binding to the methods xref:System.Runtime.InteropServices.Marshal.SizeOf``1, xref:System.Runtime.InteropServices.Marshal.SizeOf``1(``0), xref:System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Object), xref:System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Type), xref:System.Runtime.InteropServices.Marshal.PtrToStructure``1(System.IntPtr), or xref:System.Runtime.InteropServices.Marshal.PtrToStructure``1(System.IntPtr,``0), (via Windows PowerShell, IronPython, or the C# dynamic keyword, for example) can result in MethodInvocationExceptions because new overloads of these methods have been added that may be ambiguous to the scripting engines.

  • Quirked
  • Build-time break

Update scripts to clearly indicate which overload shouldbe used. This can typically done by explicitly casting the methods' type parameters as xref:System.Type. See this link for more detail and examples of how to workaround the issue.

Affected APIs

  • Not detectable via API analysis

Category

Core

More information