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: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”是一个红色的鲱鱼! 希望这可以帮你解决你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 为什么我得到一个“无法更新EntitySet,因为
- asp.net-mvc-3 – 从HttpContext.Current访问TempData
- asp.net – 在开发,分段和生产环境之间区分web.config
- asp.net – 错误:“填充:SelectCommand.Connection属性尚
- 使用VSCode,DNX和kestrel运行第一个ASP.NET 5应用程序会导致
- asp.net – 解决.net Web应用程序中的可伸缩性和性能问题
- asp.net – Alpha Five Version 10如何开发Web应用程序
- asp.net-mvc-3 – Mini Profiler不渲染脚本
- asp.net – 在.NET中使用TinyMCE有一种简单的Spellcheck方法
- asp.net-web-api – Web API 2是否可以通过编程方式加载路由
- asp.net-mvc – 不能使用以“name”结尾的数据属
- Asp.Net MVC EF各版本区别
- iis-7 – ASP.NET应用程序吃内存. Application /
- asp.net-mvc – 如何告诉Ninject绑定到它没有引用
- asp.net – oauth令牌共享多个应用程序
- ASP.NET:Viewstate并以编程方式添加用户控件
- .net – 可以为空的枚举类型的奇怪行为
- asp.net-mvc – 基于Microsoft.AspNet.Identity角
- asp.net-mvc – HttpContext.Current调用背后有多
- asp.net-mvc – MVC 3.0编辑可变长度列表并使用P