.NET程序集格式是否有大小限制?

时间:2009-09-22 19:25:15

标签: asp.net assemblies ilmerge badimageformatexception aspnet-merge

我们遇到了一个我以前从未体验过的有趣问题。我们在Visual Studio 2008 SP1中有一个大规模生产的ASP.NET 3.5 SP1 Web App项目,它使用网站部署项目进行编译和部署。去年一切都运行良好,直到昨天办理登机手续后,应用程序开始严重失败BadImageFormatException

有问题的办理登机手续不会改变任何特别特别的错误,错误来自应用程序的某些区域,甚至没有更改。使用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的程序集,虽然很大,但并不是无耻的。

2 个答案:

答案 0 :(得分:2)

您可以尝试在其上运行PEVerify,看看您得到了什么。

对我而言,这听起来像编码问题......但我不确定为什么会发生这种情况。技术上限制了可以装入程序集中元数据表的元数据量,但我怀疑这是否是问题所在。

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

答案 1 :(得分:0)

当您尝试在x86上运行x64代码时,是否抛出BadImageFormatException?