不在非 Windows 平台上探测 A/W 后缀

在非 Windows 平台上探测 P/Invoke 期间,.NET 运行时不再向函数导出名称添加 AW 后缀。

引入的版本

5.0

更改描述

Windows 有一项约定,即要求向 Windows SDK 函数名称添加 AW 后缀,这分别与 Windows 代码页面和 Unicode 版本相对应。

对于之前版本的 .NET,在导出对 P/Invoke 的发现结果的过程中,CoreCLR 和 Mono 运行时在所有平台上都会向导出名称添加 AW 后缀。

而对于 .NET 5 及更高版本,在导出发现过程中,仅在 Windows 上向导出名称添加 AW 后缀。 在 Unix 平台上,不会添加后缀。 在 Windows 平台上,这两种运行时的语义保持不变。

更改原因

此项更改旨在简化跨平台探测。 如果非 Windows 平台不包含此语义,则不得产生此项开销。

若要缓解此更改的影响,可在非 Windows 平台上手动添加所需的后缀。 例如:

[DllImport(...)]
extern static void SetWindowTextW();

受影响的 API