Rotativa ViewAsPDF生产环境报错:无法加载System.Web.Mvc 3.0.0.1求助
你遇到的这个错误,本质是Rotativa组件依赖了旧版本的System.Web.Mvc(3.0.0.1),但你的生产环境里只部署了项目实际使用的更高版本MVC(因为你的项目基于.NET 4.5.1,大概率用的是MVC4或MVC5),所以组件加载时找不到对应版本的程序集,就抛出了这个异常。
理论上可以把这个版本的dll放到生产环境的bin目录,或者在服务器上安装MVC3的运行时,但我非常不推荐这么做——不同版本的ASP.NET MVC之间存在不少API和行为差异,直接引入旧版本很可能导致你现有MVC Areas的功能出现冲突(比如路由解析异常、视图渲染失败、甚至整个应用池崩溃),反而会引发更多问题。
最稳妥的方式是用程序集绑定重定向,让.NET运行时把对MVC 3.0.0.1的请求自动重定向到你项目实际使用的MVC版本,具体操作如下:
打开项目的
Web.config文件找到(如果没有就手动添加)
<runtime>节点,在里面加入以下配置:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <!-- 把oldVersion范围覆盖到3.0.0.1,newVersion改成你项目实际用的MVC版本号 --> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> </dependentAssembly> </assemblyBinding> </runtime>注意:
newVersion要替换成你项目中实际引用的System.Web.Mvc版本(可以在Visual Studio的“引用”里查看该dll的版本号)。确认生产环境的bin目录里已经包含你项目使用的MVC版本的
System.Web.Mvc.dll(如果是用NuGet管理的,发布时会自动包含)。
另外,你也可以尝试升级Rotativa到最新的兼容版本——有些较新的Rotativa版本已经更新了依赖,不再要求MVC3,这样从根源上解决依赖问题。
如果配置了绑定重定向还是报错,记得检查:
- Web.config里的绑定重定向配置是否正确(publicKeyToken必须是
31bf3856ad364e35,这是微软官方MVC程序集的公钥) - 生产环境bin目录里的System.Web.Mvc.dll版本是否和newVersion一致
内容的提问来源于stack exchange,提问作者Sri

