我们遇到了一个我以前从未体验过的有趣问题.我们在Visual Studio 2008 SP1中有一个大规模生产的ASP.NET 3.5 SP1 Web App项目,它使用网站部署项目进行编译和部署.去年一切都运行良好,直到昨天办理登机手续后,应用程序开始严重失败BadImageFormatException.
有问题的登记不会改变任何特别特别的错误,错误来自应用程序的区域甚至没有改变.使用Reflector我们检查了有问题的方法,发现代码中有垃圾字符串(.NET Reflector幽默地解释为中文字符).我们一直在几台机器上重现这一点,因此它似乎与硬件无关.
进一步检查显示,在部署期间用作aspnet_merge.exe输入的程序集中不存在这些垃圾字符串.
aspnet_merge.exe/Web部署项目输出程序集属性:
- 将所有输出合并到单个程序集
- 将每个单独的文件夹输出合并到其自己的程序集
- 将所有页面和控制输出合并到单个装配中
- 为每个页面和控件输出创建单独的程序集
在Web部署项目属性中,如果我们将合并选项设置为第一个选项("将所有输出合并到单个程序集"),我们会遇到问题,但所有其他选项都可以正常运行!
我的问题:有谁知道为什么会这样?aspnet_merge.exe的功能是否有大小限制(生成的合并DLL大约为19.3 MB)?合并WAP的输出还有其他已知问题吗?
如果任何汇编格式/ aspnet_merge.exe专家知道任何此类限制,我会很高兴.对我来说就像一个25MB的程序集,虽然很大,但并不令人发指.
asp.net ilmerge assemblies aspnet-merge badimageformatexception
我遇到了此处报告的相同问题:“Bad Binary Signature” in ASP.NET MVC application
ASP.Net MVC 站点在本地计算机上运行良好,但是当使用 aspnet_compiler、aspnet_merge 和 msdeploy 的组合进行部署时,加载任何页面都将失败并出现以下错误:
System.BadImageFormatException 错误的二进制签名。(HRESULT 异常:0x80131192)
链接问题中接受的解决方案表明该问题是由使用错误版本的 aspnet_merge 引起的,并且我已经验证从部署中删除 aspnet_merge 步骤可以解决该问题。
我的问题是使用正确的 aspnet_merge 版本似乎无法解决问题。
该 Web 应用程序面向 .Net 4.0 64 位。使用的 aspnet_merge 路径为:“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\aspnet_merge.exe”
[编辑]
本地开发是:
构建路径是: