在.NET 7环境的Electron.NET应用中调用Windows Hello的技术问题求助
在.NET 7 Electron.NET应用中集成Windows Hello的实践方案
我最近帮朋友搞定了在基于.NET 7的Electron.NET应用里实现Windows Hello的需求——我们只需要用它来获取简单的键值对,过程踩了不少坑,分享下完整的思路和解决办法:
最初的碰壁尝试
- 一开始我们翻遍了NuGet上的包,愣是没找到适配.NET 7的Windows Hello专属包;那些Fido2、WebAuthn类库功能太全面了,我们只需要调用Windows Hello的核心能力,用它们有点杀鸡用牛刀的感觉。
- 因为之前我们通过导入
user32.dll里的函数搞定过打开文件资源管理器的需求,所以想照搬这个思路。甚至特意用PowerShell命令导出了user32.dll的所有函数列表:
结果翻来覆去看了好多遍,里面完全没有和Windows Hello相关的接口,这条路直接走死了。powershell "dumpbin /exports C:\Windows\System32\user32.dll | tee user32_functions.txt"
找到解决方案后的小插曲
后来我们终于找到了可行的实现方案,但编译时突然抛出了这个错误:
Referencing a Windows metadata component directly when targeting .NET 5 or higher is not supported.
这个问题修复起来很简单,只需要在项目的.csproj文件里明确指定目标Windows版本就行。具体来说,修改或添加如下配置:
<PropertyGroup> <TargetFramework>net7.0-windows</TargetFramework> <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion> </PropertyGroup>
这里要注意,Windows Hello仅支持Windows 10及以上系统,所以TargetPlatformMinVersion建议设置为Win10的最低兼容版本(比如17763,对应Win10 1809)。
补充说明
其实Windows Hello的相关API属于Windows Runtime(WinRT)范畴,并不是传统的Win32 API(比如user32.dll里的那些),所以之前盯着user32.dll找肯定是找不到的。配置好项目的Windows目标版本后,就可以直接引用Windows.Security.Credentials.UI等命名空间下的类,轻松实现获取Windows Hello提供的键值对功能了。
内容的提问来源于stack exchange,提问作者jamie yello
相关产品推荐
相关产品推荐

