AssemblyBinding BindingRedirect不适用于带有T4MVCExtensions的MVC4应用程序

我们有一个使用T4MVC的大型.NET Web应用程序MVC3。 我们最近将它升级到了MVC4,除了T4MVCExtensions(来自NuGet的版本3.6.5)仍然依赖于System.Web.Mvc版本3之外一切都很好。你应该在web.config中设置的运行时依赖项应该是应该的重定向程序集绑定,但它们似乎不是。 发生以下exception:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index 

我们的web.config文件中有以下内容,应该映射它,但它似乎不是 –

                

我已经启用了融合日志,只是为了真实地validation我的疯狂,并且看到了,确实,它确实似乎试图使用mvc3二进制文件,而不是4:

 *** Assembly Binder Log Entry (5/21/2013 @ 3:37:23 PM) *** The operation failed. Bind result: hr = 0x80004005. Unspecified error Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable c:\windows\system32\inetsrv\w3wp.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = IIS APPPOOL\ASP.NET v4.0 LOG: DisplayName = System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Fully-specified) LOG: Appbase = file:///C:/Work/Webs/SSUApp/SSUApp/ LOG: Initial PrivatePath = C:\Work\Webs\SSUApp\SSUApp\bin LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\lssapp\7a6e6cde LOG: Cache Base = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\lssapp\7a6e6cde LOG: AppName = d5bcf9a8 Calling assembly : App_Web__managerulespartial.cshtml.38bccb18.jb5ozz39, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null. === LOG: Start validating all the dependencies. LOG: [Level 1]Start validating native image dependency mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. LOG: [Level 1]Start validating IL dependency System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. LOG: [Level 1]Start validating native image dependency System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. LOG: [Level 1]Start validating native image dependency System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. LOG: [Level 1]Start validating IL dependency System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. LOG: [Level 1]Start validating IL dependency Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. LOG: [Level 1]Start validating IL dependency System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. LOG: [Level 1]Start validating IL dependency System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. LOG: [Level 1]Start validating IL dependency System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. Native image has correct version information. LOG: Validation of dependencies succeeded. LOG: Bind to native image succeeded. Attempting to use native image C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Web.Mvc\f234ba2bcf5f845279e46dc04198a7cd\System.Web.Mvc.ni.dll. Rejecting code sharing because a dependent assembly did not match the conditional APTCA share mode Native image successfully used. 

任何想法都会摇摆不定,因为我已经烧了好几个小时。

谢谢,弗朗西斯

在将一组MVC3项目手动升级到MVC4之后,我遇到了一个非常类似的程序集绑定问题。 尽管在web.config中有汇编绑定元素,但我收到的错误类似于T4MVC错误,但来自Telerik MVC Extensions。

Fusion Log查看器很有用,因为它确认将两个版本的system.web.mvc加载到应用程序域中。

最后,从项目的根web.config中的根配置元素中删除命名空间解决了该问题。

所以,web.config是这样的:

     

删除命名空间后,它看起来像这样:

     

这篇博客文章提供了有关错误命名空间的更多信息: http : //www.dotnetish.com/runtime/xmlnshttpschemas-microsoft-com-netconfigurationv2-0/

为了隔离,我会尝试创建一个针对MVC3构建的小型虚拟程序集,以查看它是否表现相似。 T4MVC辅助组件应该没有什么特别之处。

另外,请查看我的测试项目https://github.com/davidebbo/T4MVCSampleApp 。 这是一个使用最新T4MVC的MVC4项目,它对我来说运行良好。 它适合你吗?

如果所有其他方法都失败了,如果你可以共享一个repro项目(例如在github上),我可以试着看看。