C# 具有强命名二进制文件的CefSharp
在启用了.NET Framework注册表项C# 具有强命名二进制文件的CefSharp,c#,cefsharp,strongname,C#,Cefsharp,Strongname,在启用了.NET Framework注册表项AllowStrongNameBypass的计算机上,一切都可以运行。 但是,我们要求在部署的环境中禁用AllowStrongNameBypass 我们需要有CefSharp.BrowserSubProcess.exe及其非托管依赖项强名称(最好不用自己构建CefSharp) 作为测试,我们尝试自己通过使用ildasm.exe反汇编CefSharp.BrowserSubProcess.exe并使用ilasm.exe和使用sn.exe生成的密钥来重新组装
AllowStrongNameBypass
的计算机上,一切都可以运行。
但是,我们要求在部署的环境中禁用AllowStrongNameBypass
我们需要有CefSharp.BrowserSubProcess.exe及其非托管依赖项强名称(最好不用自己构建CefSharp)
作为测试,我们尝试自己通过使用ildasm.exe
反汇编CefSharp.BrowserSubProcess.exe
并使用ilasm.exe
和使用sn.exe
生成的密钥来重新组装程序集强名称密钥。不幸的是,这在MethodAccessException
中失败
是否有可用版本的CefSharp,其中程序集是强名称的,或者有解决此问题的方法?CefSharp似乎有一些无效的强名称程序集。正如@Fizz指出的那样,32位平台下的CefSharp.BrowserSubProcess.exe
的后期构建步骤是造成这种情况的原因
使用CefSharp GitHub repo中提供的CefSharp.snk密钥重新签名有问题的程序集。您可以使用以下命令对其重新签名:
sn.exe-R CefSharp.BrowserSubProcess.exe[CefSharp key]
我从NuGet安装了v51.0.0,运行了sn-T“[dll]”
,我检查的dll(包括CefSharp.BrowserSubProcess.exe
)具有强名称。如果您的版本没有尝试查找发生MethodAccessException
的原因,我找到了这篇文章:@dukedukes我在v51.0.0二进制文件上看到的是命令sn.exe-Tp CefSharp.BrowserSubProcess.exe
显示公钥(我也可以通过ildasm
看到)。尽管命令sn.exe-vf-CefSharp.BrowserSubProcess.exe
返回以下错误:未能验证程序集--assembly'CefSharp.BrowserSubProcess.exe'的强名称验证失败。
我刚才尝试了sn-vf-CefSharp.BrowserSubProcess.exe
,看到了相同的东西,但只针对32位,64位验证正确。我尝试了32位和64位版本的sn.exe。一个选项可能是使用CefSharp GitHub repo中可用的CefSharp.snk
键重新指定程序集,然后对出现此问题的每个程序集重复此操作。似乎x86 buildCefSharp.BrowserSubProcess.exe
二进制文件的生成后步骤使用/LargeAddressware
标志调用editbin.exe
。此标志似乎破坏了强名称验证。另外@dukedukes是正确的,使用sn.exe-R CefSharp.BrowserSubProcess.exe[CefSharp key]
似乎使强名称有效(根据sn.exe-vf
)@诸位诸位,你们不妨把它写下来作为一个答案。好发现。仅供参考,我在CefSharp的GitHub页面上提交了一期。