Dav*_*d M 11 asp.net-mvc 64-bit interop
当它部署到64位Windows 2008服务器盒时,我们在ASP.NET MVC应用程序的某些页面上收到上述错误.它在我们的开发机器上工作正常,尽管它们是32位XP.只是想知道是否有人曾经遇到过此事,并有任何建议吗?详情如下:
坏二进制签名.(HRESULT异常:0x80131192)
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Runtime.InteropServices.COMException:错误的二进制签名.(HRESULT异常:0x80131192)
所有项目都设置为为任何CPU编译,并在发布模式下编译.ASP.NET网站已预编译,预编译版本位于64位Windows 2008 TeamCity构建代理上.提前致谢.
编辑
我们仍然受此困扰.我使用corflags.exe查看了网站bin目录中的所有二进制文件.没有设置32BIT标志,并且所有的CorFlags值都为9,除了Antlr3.Runtime.dll,其值为1.该问题仅影响某些页面,似乎是使用FluentValidation的那些(包括FluentValidation.Mvc)和FluentValidation.xValIntegration程序集).当使用corflags.exe进行检查时,这些都不会显示任何异常,并且ildasm没有显示奇怪的依赖关系.
在本地构建(32位Windows XP)时,该站点部署并运行正常.在构建代理(64位Windows 2008 Server)上构建时,站点会显示这些错误.该站点以集成管道模式运行,未设置为32位.
堆栈跟踪是:
[COMException (0x80131192): Bad binary signature. (Exception from HRESULT: 0x80131192)]
ASP.views_user_newinternal_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) in e:\TeamCity\buildAgent\work\605ee6b4a5d1dd36\...Admin.Mvc\Views\User\NewInternal.aspx:53
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +115
ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in e:\TeamCity\buildAgent\work\605ee6b4a5d1dd36\...Admin.Mvc\Views\Shared\Site.Master:26
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +115
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +240
System.Web.UI.Page.Render(HtmlTextWriter writer) +38
System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +94
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4240
Run Code Online (Sandbox Code Playgroud)
我刚刚看到一个类似的问题,其中在视图中使用了一些lambda表达式,这导致在64位系统上编译时.Net dll的损坏.它会导致你看到的同样异常,当然听起来像是一个可能的候选人.
抱歉,如果这看起来有点模糊,因为我们还没有完全解决这个问题并且仍然在研究它,尽管我们肯定会在我们有解决方案时更新.
让我们相信这是一个真正的损坏dll的路径是,如果你在ildasm.exe中查看你编译的视图dll,并检查涉及lamda的实际方法调用,你会得到一个"[SIGNATURE ENDED PREMATURELY]"错误ILDASM.然而,当试图扩展该方法时,RedGate的反射器会崩溃.
在我们的例子中,ildasm看起来像这样:
IL_029f: call class [System.Core]System.Linq.Expressions.Expression`1<!!0> [System.Core]System.Linq.Expressions.Expression::Lambda<class [System.Core]System.Func`2<class [MyCode.Authentication.Admin.Mvc]MyCode.Authentication.Admin.Mvc.Dto.InternalUserDto,object>>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[])
IL_02a4: call class [System.Web.Mvc]System.Web.Mvc.HtmlHelper [MyCode.Extensions]MyCode.Extensions.System.Web.Mvc.HtmlHelperInputExtensions::CheckBox<[2]>(class [System.Core]System.Linq.Expressions.Expression`1<class [System.Core]System.Func`2<class [MyCode.Extensions]'type parameter'.T,object>> [SIGNATURE ENDED PREMATURELY])
Run Code Online (Sandbox Code Playgroud)
我们注意到这只是一个64位的问题.我们即将调查.Net 4.0上是否仍会出现此问题.我们知道的时候会在这里更新.
我们也在查看是否已将此问题视为Microsoft的错误.我们知道的时候,我会在这里更新.
[编辑:现在已经找到问题的根本原因]
我以为我会回来更新这个答案.
对我们来说,事实证明这根本不是编译器问题,而是aspnet_merge的一个问题.简而言之,在我们的64位构建盒上,我们使用的是一个较旧的,过时的aspnet_merge副本(意外)似乎可以工作但导致这些损坏的dll(完全按照你描述的方式).路径已更改,因此我们的Web部署项目使用了此错误版本.
更新aspnet_merge版本3.5或更高版本的路径,修复了该问题.
我们认为这是一个64位问题,因为我们的构建盒是我们编译的唯一64位环境(我们所有的开发工作站都是32位),并且是唯一一个遇到此问题的环境.然而,"位"是一个红鲱鱼!
希望这可以帮助您解决问题.
归档时间: |
|
查看次数: |
4239 次 |
最近记录: |