6

我们遇到了一个我以前从未遇到过的有趣问题。我们在 Visual Studio 2008 SP1 中有一个大规模生产的 ASP.NET 3.5 SP1 Web 应用程序项目,它使用网站部署项目进行编译和部署。去年一切正常,直到昨天签入后,该应用程序开始严重失败,并出现BadImageFormatException.

有问题的签到并没有改变任何特别的东西,错误来自应用程序的甚至没有改变的区域。使用 Reflector 我们检查了有问题的方法,发现代码中有垃圾字符串(.NET Reflector 幽默地将其解释为汉字)。我们一直在多台机器上复制此内容,因此它似乎与硬件无关。

进一步检查表明,在部署期间用作aspnet_merge.exe输入的程序集中不存在这些垃圾字符串。

aspnet_merge.exe / Web 部署项目输出程序集属性:

  • 将所有输出合并到一个程序集中
  • 将每个单独的文件夹输出合并到自己的程序集中
  • 将所有页面和控制输出合并到一个程序集中
  • 为每个页面创建单独的程序集并控制输出

在 Web 部署项目属性中,如果我们将合并选项设置为第一个选项(“将所有输出合并到单个程序集”),我们会遇到问题,但所有其他选项都可以正常工作!

我的问题:有人知道为什么会这样吗?aspnet_merge.exe 的功能是否有大小限制(生成的合并 DLL 约为 19.3 MB)?合并 WAP 的输出是否还有其他已知问题?

如果任何汇编格式/aspnet_merge.exe 专家知道这样的限制,我会很高兴。在我看来,就像一个 25MB 的程序集,虽然很大,但并不离谱。

4

2 回答 2

2

您可以尝试在其上运行PEVerify并查看您得到的结果。

对我来说,这听起来像是一个编码问题……但我不确定为什么会发生这种情况。从技术上讲,可以放入程序集中元数据表的元数据数量是有限的,但我怀疑这是否是问题所在。

如果您在Ildasm中打开 exe,您可以看到元数据表的大小,您可以尝试查看统计信息(查看->统计)或元数据表的计数,这是一个 2 步过程: 1. 查看->元信息->Raw:Count,Sizes 2. 按 Ctrl+M

于 2010-03-27T00:36:24.490 回答
0

当您尝试在 x86 上运行 x64 代码时,不会抛出 BadImageFormatException 吗?

于 2010-03-27T00:39:10.943 回答