Rotativa组件在MVC项目生成PDF时加载System.Web.Mvc程序集报错
解决Rotativa 1.0.0.0生产环境下System.Web.Mvc版本不匹配错误
这个问题我之前在部署Rotativa到生产环境时也碰到过,核心原因就是Rotativa 1.0.0.0依赖的旧版System.Web.Mvc 3.0.0.1和你生产环境里的MVC版本不兼容,给你几个靠谱的解决办法:
1. 配置程序集绑定重定向
最直接的方法是在Web.config里添加绑定重定向,让系统把对旧版MVC的请求指向你项目实际使用的MVC版本。比如你项目用的是MVC 5.2.7.0,就这么加:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <!-- 把oldVersion范围改成你覆盖的版本,newVersion换成你项目的MVC版本 --> <bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
这个配置会告诉.NET运行时,所有对低于等于5.2.7.0版本的System.Web.Mvc请求,都用5.2.7.0版本来处理,完美解决版本不匹配的问题。
2. 确保生产环境部署了正确的MVC程序集
检查生产服务器网站的bin目录,确认里面有你项目使用的System.Web.Mvc.dll版本。如果没有,在Visual Studio里右键项目的System.Web.Mvc引用,把复制本地属性设为True,重新部署项目,这样dll就会被复制到bin目录,避免依赖服务器GAC里的旧版本。
3. 升级Rotativa到新版本(推荐)
Rotativa 1.0.0.0确实比较老旧了,后续版本已经更新了MVC依赖,比如Rotativa 1.6.4及以上版本支持MVC 4和MVC 5。升级到新版本不仅能解决这个版本兼容问题,还能获得更多功能和bug修复,一步到位。
4. 用Fusion Log Viewer排查细节
如果上面的方法都没解决,可以用Windows自带的Fusion Log Viewer(fuslogvw.exe)查看程序集加载的详细日志。打开它后启用日志,再触发错误,就能看到到底是哪个组件在请求旧版MVC,以及加载失败的具体路径,帮你精准定位问题。
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

