我的机器名称是小写的(我在“高级系统设置”对话框的“计算机名称”选项卡中看到)但System.Environment.MachineName
报告它是大写的。这是为什么?这对我来说是一个真正的问题,因为根据我的测试PrincipalPermissionAttribute
对角色名称执行区分大小写的比较(我将自定义角色映射到 Windows 组,并且我的环境是非域的)。有什么建议吗?
3 回答
.NET 4.7.1的来源Environment.MachineName
在这里:https ://referencesource.microsoft.com/#mscorlib/system/environment.cs,be0b5c103d248dce
它 p/invokesGetComputerName
如下所示:https ://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs,0c7d7f4f83d4ddd0
这是 GetComputerName 函数:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx,其中指出:
GetComputerName 仅检索本地计算机的 NetBIOS 名称。要检索 DNS 主机名、DNS 域名或完全限定的 DNS 名称,请调用 GetComputerNameEx 函数。
计算机名称的 MSDN,https ://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx指出:
NetBIOS 名称由最多 15 个字节的 OEM 字符组成,包括字母、数字、连字符和句点。某些字符特定于字符集。NetBIOS 名称通常以 OEM 字符集表示。OEM 字符集取决于区域设置。一些 OEM 字符集将某些字符表示为两个字节。按照惯例,NetBIOS 名称以大写字母表示,其中从小写字母到大写字母的转换算法取决于 OEM 字符集。
因此,NetBIOS 名称按照惯例是大写的,并System.Environment.MachineName
返回系统的 NetBIOS 名称。
改用Dns.GetHostName,它应该以正确的大小写返回它(至少它在我的计算机上是这样)。
根据这篇 MSDN 文章,它的大小写不敏感 http://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx
在哪种情况下,它会进行区分大小写的比较?