已引用Microsoft.Practices.EnterpriseLibrary.Common仍遇FileNotFoundException
这种程序集加载错误我在做Sitefinity项目时碰到过好几次,大概率是版本不匹配或者配置没跟上,给你几个实用的排查和解决步骤:
检查项目引用的版本一致性
右键你的项目→打开「引用」列表,找到Microsoft.Practices.EnterpriseLibrary.Common,查看它的属性面板里的「版本」号。如果这个版本和错误提示里的5.0.414.0不一致,要么换成Sitefinity.DAO.dll依赖的5.0.414.0版本,要么通过绑定重定向让CLR兼容版本差异。配置程序集绑定重定向
如果你的项目必须用其他版本的EnterpriseLibrary.Common,可以在项目的app.config(桌面程序)或web.config(Web程序)中添加绑定重定向配置,让CLR自动用你实际引用的版本替代需要的5.0.414.0版本。示例配置如下:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Practices.EnterpriseLibrary.Common" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <!-- 覆盖所有低于等于5.0.414.0的版本,替换为你实际引用的版本 --> <bindingRedirect oldVersion="0.0.0.0-5.0.414.0" newVersion="你的项目实际引用的版本号" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>注意:publicKeyToken要和错误提示里的完全一致,别写错。
确认程序集已复制到输出目录
右键Microsoft.Practices.EnterpriseLibrary.Common引用→属性,把「复制本地」设置为True。重新编译项目后,去项目的bin目录(Web项目则是网站根目录的bin文件夹)检查是否存在该程序集,且版本正确。如果缺失,大概率是「复制本地」没开导致部署时没带上。排查全局程序集缓存(GAC)冲突
打开Visual Studio的开发者命令提示符,执行命令:gacutil /l Microsoft.Practices.EnterpriseLibrary.Common查看GAC中是否存在该程序集的多个版本。如果有和5.0.414.0冲突的版本,要么移除不兼容的版本,要么确保绑定重定向配置能正确覆盖GAC中的版本。
匹配Sitefinity的依赖要求
因为错误来自Sitefinity.DAO.dll,要确认你使用的Sitefinity版本对Enterprise Library的版本要求。不同Sitefinity版本可能绑定了特定版本的Enterprise Library,尽量让你的项目引用的版本和Sitefinity官方要求的一致,避免不必要的兼容性问题。
内容的提问来源于stack exchange,提问作者Mauricio Gracia Gutierrez

