6

我们遇到了一个我从未遇到过的有趣问题。我们在Visual Studio 2008 SP1中有一个大规模生产的ASP.NET 3.5 SP1 Web应用程序项目,它使用网站部署项目进行编译和部署。去年一切都很顺利,直到昨天登记入住之后,该应用开始严重失败,出现BadImageFormatException.NET程序集格式有大小限制吗?

有问题的签入不会改变任何特别特殊的内容,而且错误来自应用程序的区域甚至没有改变。使用Reflector我们检查了违规方法,发现代码中有垃圾字符串(which .NET Reflector humorously interpreted as Chinese characters)。我们一直在几台机器上重现这一点,所以它看起来并不是硬件相关的。

进一步检查显示,在部署过程中用作aspnet_merge.exe的输入的程序集中存在垃圾字符串而不是

aspnet_merge.exe/Web部署项目输出 组件属性:

  • 全部合并输出到单个总成
  • 合并每个单独的文件夹输出到其自身的装配
  • 合并所有页面控制输出到单个组件
  • 为每个页面和控制输出创建一个单独的程序集

在如果我们设置合并选项,第一个选项(“合并所有输出到一个单一的组件”),我们遇到的问题,但的其他选择工作完全所有 Web部署项目属性!

我的问题:有谁知道为什么会发生这种情况?是否有aspnet_merge.exe功能的大小限制(最终的合并DLL约为19.3 MB)?是否还有其他合并WAP输出的已知问题?

我会喜欢它,如果任何程序集格式/ aspnet_merge.exe大师知道这样的任何限制。对我来说就像一个25MB的大会,虽然很大,但并不离谱。

+0

你可以修复图片或删除链接吗? – Laurel 2016-04-21 23:52:30

回答

2

您可能会尝试运行PEVerify并查看所得结果。

对我来说,这听起来像一个编码问题......但我不知道为什么会发生。从技术上来说,元数据量可以适用于程序集中的元数据表,但我怀疑这是否是问题。

如果您在Ildasm中打开exe文件,您可以查看元数据表的大小,您可以查看统计数据(查看 - >统计数据)或元数据表的计数,这是一个两步过程:1。查看 - > Metainfo-> Raw:计数,尺寸2.按Ctrl + M

+0

感谢您的工具。我将不得不尝试这些并报告它发现的内容。当我使用Reflector来查看有问题的方法时(请参阅上面的屏幕截图),它非常清楚程序集不正确的地方。 PEVerify会告诉我哪里不对,或者他们能说出为什么? – mckamey 2010-03-27 13:16:46

+0

如果我记得正确(自从我使用它一段时间以来),是的,它会指示它在元数据中找到的错误。但是,您可能需要在ildasm中打开它,以翻译错误消息中将提及的一些令牌等内容。 PEVerify也是一个非常原始的工具 - 这意味着它不是为每天的开发者设计的,你可能不得不谷歌的一些错误信息,看看它在说什么。 – 2010-03-29 11:43:40

0

当您尝试在x86上运行x64代码时,不会引发BadImageFormatException异常吗?

+0

这是发生这种情况之一(http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx),但在这种情况下不是这样。单独的程序集可以独立工作,但一旦合并就会失败。 – mckamey 2010-03-27 13:12:11