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
Recommended Action
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