不在非 Windows 平台上探测 A/W 后缀
在非 Windows 平台上探测 P/Invoke 期间,.NET 运行时不再向函数导出名称添加 A
或 W
后缀。
引入的版本
5.0
更改描述
Windows 有一项约定,即要求向 Windows SDK 函数名称添加 A
或 W
后缀,这分别与 Windows 代码页面和 Unicode 版本相对应。
对于之前版本的 .NET,在导出对 P/Invoke 的发现结果的过程中,CoreCLR 和 Mono 运行时在所有平台上都会向导出名称添加 A
或 W
后缀。
而对于 .NET 5 及更高版本,在导出发现过程中,仅在 Windows 上向导出名称添加 A
或 W
后缀。 在 Unix 平台上,不会添加后缀。 在 Windows 平台上,这两种运行时的语义保持不变。
更改原因
此项更改旨在简化跨平台探测。 如果非 Windows 平台不包含此语义,则不得产生此项开销。
建议操作
若要缓解此更改的影响,可在非 Windows 平台上手动添加所需的后缀。 例如:
[DllImport(...)]
extern static void SetWindowTextW();