asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC应用程序中的“坏二进制签名”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当ASP.NET MVC应用程序部署到64位 Windows 2008服务器框时,我们会在某些页面上收到上述错误.它在我们的开发机器上工作正常,尽管这些是32位XP.只是想知道有人以前遇到过,有什么建议吗?详情如下:

所有项目都设置为对任何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:\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

解决方法

我刚刚看到一个类似的问题,在视图中使用了一些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”是一个红色的鲱鱼!

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

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – ASP.NET MVC应用程序中的“坏二进制签名”全部内容,希望文章能够帮你解决asp.net-mvc – ASP.NET MVC应用程序中的“坏二进制签名”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。