Windows Server 2012 R2中.NET应用加载Ubiety.Dns.Core程序集失败求助
针对你遇到的Ubiety.Dns.Core强名称验证失败问题——仅在Windows Server 2012 R2触发而Win10正常,核心原因及解决方法如下:
核心原因
系统强名称验证策略差异
Windows Server 2012 R2默认启用更严格的强名称验证规则,尤其针对延迟签名的程序集。而Windows 10后续更新中调整了验证逻辑,对部分场景的限制有所放宽,若Ubiety.Dns.Core是延迟签名程序集,Server 2012 R2会严格校验签名完整性,Win10则可能允许跳过部分验证。.NET Framework版本兼容性
Windows Server 2012 R2默认预装.NET Framework 4.5.2,Windows 10通常自带4.7及以上版本。不同.NET版本对强名称验证的实现存在差异,旧版本在处理某些签名场景时易触发错误,新版本则修复了这类问题。系统安全更新缺失
若Server 2012 R2长期未安装更新,可能缺少针对强名称验证的补丁。微软曾发布调整该验证逻辑的更新,这些补丁在Win10中默认包含,但Server 2012 R2需手动安装。
解决方法
跳过程序集强名称验证:以管理员身份打开命令提示符,执行以下命令(替换为你的程序集实际路径):
sn -Vr "C:\你的程序路径\Ubiety.Dns.Core.dll"该命令会为目标程序集添加验证豁免,适合测试环境使用。
升级.NET Framework版本:在Server 2012 R2上安装最新兼容的.NET Framework版本(如4.8),新版本修复了旧版的验证逻辑问题。
安装系统累积更新:检查并安装Server 2012 R2的所有安全累积更新,重点关注涉及.NET Framework和强名称验证的补丁。
使用完全签名的程序集:若你自行构建
Ubiety.Dns.Core,确保用正式私钥完成完整签名,避免延迟签名的情况。
内容的提问来源于stack exchange,提问作者Koops128

