我有一个可以在旧Windows 7计算机上正常运行的程序。我将其文件夹复制到了我的新Windows 10计算机上(没有需要更复杂安装过程的详细信息),突然间它无法运行。尝试在命令行上运行它会给我:
未处理的异常:System.IO.FileLoadException:无法加载文件或程序集'foo,Version = 2.0.9.4,Culture = neutral,PublicKeyToken = 32c39770e9a21a67'或其依赖项之一。强名验证失败。 (来自HRESULT的异常:0x8013141A)---> System.Security.SecurityException:强名称验证失败。 (来自HRESULT的异常:0x8013141A) ---内部异常堆栈跟踪的结尾---
告诉我什么都没有。程序“或其依赖项之一”在强名称验证方面存在问题,我不知道它是哪一个,对于我一生,我不知道如何找出问题所在!
我尝试过FUSLOGVW。这台计算机上有多个不同的版本,并且我一次尝试了每个版本,请确保将它们设置为记录到光盘的绑定失败,尝试运行失败的程序,然后刷新FUSLOGVW。什么都没出现。
我尝试对程序运行sn.exe -v
。它告诉我:
验证程序集失败-强名称验证失败。
再一次,这是完全没用的,因为我不知道发生了什么问题或原因。
我在这里找到了一些问题,并提供了有关使用sn.exe
或各种注册表技巧来禁用强名称验证的答案。这不是我想做的;我想找出问题所在并解决。再一次,在我的Windows 7机器上,使用完全相同的二进制文件,一切都可以正常工作。
如何确定此程序的强命名验证出了什么问题?
答案 0 :(得分:1)
假设该程序集可能已经在Windows 7计算机上注册了强名称验证跳过功能,那么如果您使用sn.exe -Vu foo.dll
来取消注册foo.dll
从而跳过验证,程序集会在那里停止工作吗?在这种情况下,除了在Windows 10计算机上sn.exe -Vr foo.dll
之外,您别无选择,只能对该程序集启用验证跳过。您是否尝试过从Windows 7计算机第二次复制程序集以从可能的答案中排除随机损坏?组装延迟签名或类似的东西吗? Windows 7计算机的GAC中该程序集的工作版本是否正常?