Есть ли ограничения по размеру для формата .NET Assembly? - PullRequest
6 голосов
/ 22 сентября 2009

Мы столкнулись с интересной проблемой, с которой я не сталкивался раньше. У нас есть крупномасштабный производственный проект веб-приложения ASP.NET 3.5 с пакетом обновления 1 (SP1) в Visual Studio 2008 с пакетом обновления 1 (SP1), который компилируется и развертывается с использованием проекта развертывания веб-сайта. В прошлом году все работало нормально, пока вчера после регистрации приложение не начало критически работать с BadImageFormatException.

Рассматриваемая регистрация не меняет ничего особенно особенного, и ошибки происходят из областей приложения, которые даже не изменились. Используя Reflector, мы проверили оскорбительные методы и обнаружили, что в коде были строки мусора (, которые .NET Reflector шутливо интерпретировал как китайские символы ). Мы последовательно воспроизводили это на нескольких машинах, поэтому, похоже, это не связано с аппаратным обеспечением.

Дальнейшая проверка показала, что эти строки мусора не существуют в сборках, используемых в качестве входных данных для aspnet_merge.exe во время развертывания.

aspnet_merge.exe / Вывод проекта веб-развертывания Свойства сборки:

  • Объединить все выходы в одну сборку
  • Объединить каждый отдельный вывод папки в свою сборку
  • Объединение всех страниц и управляющих выходов в одну сборку
  • Создать отдельную сборку для каждой страницы и контрольный вывод

В свойствах проекта веб-развертывания, если мы установили параметры слияния для первого параметра («Объединить все выходные данные в одну сборку»), мы столкнемся с проблемой, но все других параметров работают отлично!

Мой вопрос: Кто-нибудь знает, почему это происходит? Есть ли ограничение по размеру для возможностей aspnet_merge.exe (итоговая объединенная DLL составляет около 19,3 МБ)? Есть ли другие известные проблемы со слиянием выходных данных WAP?

Буду рад, если любой гуру формата Assembly / aspnet_merge.exe узнает о таких ограничениях, как это. Мне кажется, что сборка 25 МБ, хотя и большая, но не возмутительно.

Ответы [ 2 ]

2 голосов
/ 27 марта 2010

Вы можете попробовать запустить PEVerify и посмотреть, что вы получите.

Для меня это звучит как проблема кодирования ... но я не уверен, почему это произойдет. Технически существует ограничение на количество метаданных, которые могут вписаться в таблицы метаданных в сборке, но я сомневаюсь, что это проблема.

Вы можете увидеть размер таблиц метаданных, если откроете exe в Ildasm , вы можете попробовать посмотреть статистику (View-> Statistics) или количество таблиц метаданных, которое равно 2. пошаговый процесс: 1. View-> Metainfo-> Raw: Count, Sizes 2. Нажмите Ctrl + M

0 голосов
/ 27 марта 2010

Не возникает ли исключение BadImageFormatException при попытке запустить код x64 на x86?

...