前几天遇到一个恶心的问题,跟同事一块解决了,在这里记录下过程。html
比较懒,直接转他的blog:git
http://www.cnblogs.com/caochenghua/p/6530053.htmlgithub
报错信息以下api
“System.IO.FileNotFoundException”类型的异常在 Google.Apis.dll 中发生,但未在用户代码中进行处理服务器
其余信息: 未能加载文件或程序集“Zlib.Portable, Version=1.11.0.0, Culture=neutral, PublicKeyToken=431cba815f6a8b5b”或它的某一个依赖项。系统找不到指定的文件。google
项目中已经包含了Zlib.Portable.dll ,查看了文件属性,确认版本号已经保持一致spa
使用PowerShell查看现有Dll的PublicKeyToken,发现是未强签名版本。code
1 ([system.reflection.assembly]::loadfile("D:\Web\bin\Zlib.Portable.dll")).FullName 2 3 Zlib.Portable, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null
那缘由应该就在这里了,htm
找到https://github.com/google/google-api-dotnet-client-samples代码并下载blog
用Visual Studio打开下载的项目,点项目-》管理NuGet程序包,提示自动更新依赖的DLL文件,更新完成
此时,咱们须要的Zlib.Portable.dll已经能够在文件夹中显示了:google-api-dotnet-client-samples-master\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid
打开Windows PowerShell使用如下命令比较新生成的Zlib.Portable.dll和原有的项目中Zlib.Portable.dll :
1 ([system.reflection.assembly]::loadfile("D:\Zlib.Portable.dll")).FullName 2 3 Zlib.Portable, Version=1.11.0.0, Culture=neutral, PublicKeyToken=431cba815f6a8b5b 4 5 ([system.reflection.assembly]::loadfile("D:\Web\bin\Zlib.Portable.dll")).FullName 6 7 Zlib.Portable, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null
区别是后者PublicKeyToken=null前者不是,至此缘由大概明了,没有强签名的dll已经不能使用了,Google Review API对此进行了更加严格的限制是致使报错的缘由吧
把新生成的Zlib.Portable.dll替换到服务器上,报错果真消失了!恢复正常