错误信息:未能加载文件或程序集“Enyim.Caching”或它的某一个依赖项。未能验证强名称签名。此程序集可能已被篡改,或者已被延迟签名,但没有用正确的私钥进行完全签名。
[FileLoadException: 未能加载文件或程序集“Enyim.Caching, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cec98615db04012e”或它的某一个依赖项。未能验证强名称签名。此程序集可能已被篡改,或者已被延迟签名,但没有用正确的私钥进行完全签名。 (异常来自 HRESULT:0x80131045)]
最新版已经是Enyim Memcached Client 2.12.0,详见:http://www.nuget.org/packages/Memcached/
解决方法:
在web.config中添加如下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Enyim.Caching" publicKeyToken="cec98615db04012e" culture="neutral" /> <bindingRedirect oldVersion="1.0.0.0-2.12.0.0" newVersion="2.12.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
dudu老大,服务器上不行啊,我是本地去掉签名编译源码得到的dll,可以在本地使用,但dll烤给同事使用就还是报那个错误,同事自己把签名去掉重新编译后,本地可以调试了,但在服务器上还是报这个错误。
@多一块石头: 去掉签名把所有的关联的都给去掉。
@多一块石头:
如果签名的话,只能用Enyim.Caching 1.0.0.0
@imfunny:指的是哪些?我都去掉也不行啊,而且每次把为程序集签名选项去掉,但再次打开依然是勾选上的,而且即使当时去掉了,编译出的dll,在引用信息里依然是强名称,签过名的。
@dudu: 这个是什么意思?我编译后默认版本就是1.0.0.0。
@多一块石头: 修改AssemblyInfo.cs没?就是VS属性中去掉?
@多一块石头:
你遇到的问题与我这篇博客中遇到的问题是一样的
@imfunny:
[assembly: AssemblyProduct("Enyim.Caching")]
[assembly: AssemblyCompany("enyim.com")]
[assembly: AssemblyCopyright("Copyright © enyim.com, Attila Kiskó 2007-2010")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("a8cd3f39-7731-4ee8-a7ce-444d540d4a4d")]
这是程序集的代码貌似没问题。
@dudu: 试了一下,好像问题依然,也许我哪步错了,我再试试。
@dudu: 恩,是一样的,我现在搞不明白的是,本地vs编译后,添加引用,运行都没有问题,本地IIS也通过,就是放到服务器后报这个问题。
@多一块石头: 服务器上的GAC中有没有Enyim.Caching?
@dudu: 问题解决了,本地添加文件引用的话不需要添加GAC,服务器也不需要。要点是你上面提到的web.config添加runtime节,和程序签名,非常感谢。
@imfunny:已解决, 非常感谢。
@多一块石头: 能给一个具体的,可以运行的demo吗?我也碰到和你一样的问题了。
今天也碰到一样的问题,解决方法是打开build/CommonProperties.targets文件,注释public_key.snk所在节点,编译引用即可。详见:http://www.mzwu.com/article.asp?id=3741