ASP.NET集成Google.Authenticator遇程序集引用错误,求解决方案
问题场景
在C# ASP.NET Web应用中集成Google Authenticator双因素认证(2FA),代码如下:
using Google.Authenticator; Dictionary<String, String> result = new Dictionary<String, String>(); TwoFactorAuthenticator tfa = new TwoFactorAuthenticator(); var setupInfo = tfa.GenerateSetupCode("XXXX", "TITLEXXX", "CODEXXXX", 300, 300); var result = tfa.ValidateTwoFactorPIN("XXSSWWW", "XXXXWWW");
调用tfa.GenerateSetupCode和tfa.ValidateTwoFactorPIN时触发错误:
The type "Object" is defined in an assembly that is not referenced. You must add a reference to assembly 'netstand. version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
已尝试操作:
- 将Web应用目标框架从.NET Framework 4.6.1改为.NET Framework 4.8
- 卸载并重新安装Google.Authenticator 3.0.0 NuGet包
错误原因
错误中的netstand是NETStandard.Library的拼写错误。Google.Authenticator 3.0.0依赖.NET Standard 2.0,尽管.NET Framework 4.8兼容.NET Standard 2.0,但项目可能缺少对NETStandard.Library的引用,或者程序集绑定重定向配置缺失/不正确,导致无法正确解析相关程序集。
解决步骤
1. 显式安装NETStandard.Library NuGet包
打开NuGet包管理器控制台,执行命令:
Install-Package NETStandard.Library -Version 2.0.3
也可通过NuGet包管理器界面搜索安装该包,选择2.0.x版本(匹配.NET Standard 2.0)。
2. 添加程序集绑定重定向
在Web.config的<runtime>节点下添加以下配置,确保.NET Framework能正确解析.NET Standard程序集:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="NETStandard.Library" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.3.0" newVersion="2.0.3.0" /> </dependentAssembly> </assemblyBinding> </runtime>
3. 清理重建项目
- 右键项目 → 选择「清理」
- 右键解决方案 → 选择「清理解决方案」
- 右键项目 → 选择「生成」
- 右键解决方案 → 选择「生成解决方案」
4. 降级Google.Authenticator版本(备选)
若上述方法无效,可降级到直接兼容.NET Framework的旧版本,比如2.2.0:
Uninstall-Package Google.Authenticator Install-Package Google.Authenticator -Version 2.2.0
内容的提问来源于stack exchange,提问作者Ng Zheng

