Есть ли ограничения по размеру для формата.NET Assembly?
Мы столкнулись с интересной проблемой, с которой я не сталкивался раньше. У нас есть крупномасштабный производственный проект веб-приложения 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 ответа
Вы можете попробовать запустить PEVerify и посмотреть, что вы получите.
Для меня это звучит как проблема кодирования... но я не уверен, почему это произойдет. Технически существует ограничение на количество метаданных, которые могут вписаться в таблицы метаданных в сборке, но я сомневаюсь, что это проблема.
Вы можете увидеть размер таблиц метаданных, если откроете exe- файл в Ildasm, попробуйте просмотреть статистику (View->Statistics) или количество таблиц метаданных, которое состоит из двух этапов: 1. View->Metainfo->Raw: считать, размеры 2. Нажмите Ctrl+M
Разве BadImageFormatException не генерируется, когда вы пытаетесь запустить код x64 на x86?