在Ubuntu(Mono环境)运行DevExpress版ASP.NET Web应用报错求助
这个问题我之前帮朋友排查过类似的,核心是程序集版本不匹配+Mono环境下的DevExpress部署细节,给你几个针对性的解决步骤:
先确认本地部署的程序集版本是否正确
找到你应用bin目录里的DevExpress.Web.v11.1.dll,用Mono的工具查看它的实际版本和公钥令牌:monodis --assembly /path/to/your/app/bin/DevExpress.Web.v11.1.dll对比错误提示里的
Version=11.1.4.0和PublicKeyToken=9b171c9fd64da1d1,如果bin里的dll版本不对,大概率是从Windows开发环境复制过来的时候带错了文件,重新从开发机的输出目录拷贝正确的dll到服务器。清理服务器GAC里的冲突程序集
如果你的Ubuntu服务器上的Mono全局程序集缓存(GAC)里装了其他版本的DevExpress,会优先加载GAC里的版本,导致和应用依赖的版本不匹配。执行命令删掉冲突的程序集:gacutil -u DevExpress.Web.v11.1同时记得在Windows开发环境里,把项目中DevExpress引用的复制本地属性设为
True——这样部署时会把正确版本的dll打包到bin目录,彻底避免依赖GAC的版本。检查web.config的程序集绑定重定向
打开应用的web.config,确认是否有正确的程序集绑定重定向配置,确保Mono只会加载你指定的版本。如果没有,添加如下节点到<configuration>下的<runtime>里:<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="DevExpress.Web.v11.1" publicKeyToken="9b171c9fd64da1d1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-11.1.4.0" newVersion="11.1.4.0" /> </dependentAssembly> </assemblyBinding>验证Mono版本兼容性
DevExpress v11.1是比较老的版本,针对.NET Framework 4.0开发,你需要确保Ubuntu上的Mono版本至少是4.x(对应.NET 4.0支持)。执行mono --version查看当前版本,如果版本太低,升级Mono到兼容的版本。检查依赖项是否完整
错误提示里提到“one of its dependencies”,可能是DevExpress.Web.v11.1依赖的其他dll没部署全。用Mono工具查看它的依赖列表:monodis --dependencies /path/to/your/app/bin/DevExpress.Web.v11.1.dll把所有列出的依赖dll(比如
DevExpress.Data.v11.1.dll、DevExpress.Utils.v11.1.dll等)都从开发机拷贝到服务器的bin目录里,确保没有遗漏。
内容的提问来源于stack exchange,提问作者kishea

