加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC应用程序中的“坏二进制签名”

发布时间:2020-12-15 18:59:33 所属栏目:asp.Net 来源:网络整理
导读:当ASP.NET MVC应用程序部署到64位 Windows 2008服务器框时,我们会在某些页面上收到上述错误.它在我们的开发机器上工作正常,尽管这些是32位XP.只是想知道有人以前遇到过,有什么建议吗?详情如下: Bad binary signature. (Exception from HRESULT: 0x80131192
当ASP.NET MVC应用程序部署到64位 Windows 2008服务器框时,我们会在某些页面上收到上述错误.它在我们的开发机器上工作正常,尽管这些是32位XP.只是想知道有人以前遇到过,有什么建议吗?详情如下:

Bad binary signature. (Exception from HRESULT: 0x80131192)

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.Runtime.InteropServices.COMException: Bad binary signature. (Exception from HRESULT: 0x80131192)

所有项目都设置为对任何CPU进行编译,并在“释放”模式下进行编译. ASP.NET站点已预编译,预编译版本位于64位Windows 2008 TeamCity构建代理程序上.提前致谢.

编辑

我们仍然困扰着这个.我使用corflags.exe查看了网站bin目录中的所有二进制文件.没有设置32BIT标志,除了Antlr3.Runtime.dll的值为1,所有的CorFlags值都为9,但是问题只影响某些页面,而且似乎是使用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:TeamCitybuildAgentwork605ee6b4a5d1dd36...Admin.MvcViewsUserNewInternal.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:TeamCitybuildAgentwork605ee6b4a5d1dd36...Admin.MvcViewsSharedSite.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

解决方法

我刚刚看到一个类似的问题,在视图中使用了一些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])

我们注意到这只是一个64位的问题.我们即将调查此问题是否仍然发生在.Net 4.0上.当我们知道的时候,我会更新这里.

我们也正在看到这是否已被提出为Microsoft的错误.再次,当我们知道的时候,我会更新这里.

[编辑:现在已经到了问题的根本原因]

我以为我会回来更新这个答案.

对我们来说,事实证明,这不是一个编译器问题,而是aspnet_merge的一个问题.简而言之,在我们的64位版本的框中,我们使用了一个旧的,过时的aspnet_merge副本(意外的),这似乎正常工作,但是导致这些损坏的dll(完全按照你所描述的方式).路径已被更改,因此我们的Web部署项目正在使用这个错误的版本.

更新到aspnet_merge版本3.5或更高版本的路径,修复了问题.

我们认为这是一个64位的问题,原因是因为我们的编译框是我们编译的唯一64位环境(我们的所有开发工作站都是32位),唯一的问题就是这个问题.但是,“bit ness”是一个红色的鲱鱼!

希望这可以帮你解决你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读