6

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

Запрашиваемая информация не изменяет ничего особенного, и ошибки возникают из областей приложения, которые даже не изменились. Используя Reflector, мы проверили методы оскорбления, чтобы обнаружить, что в коде были строки мусора (which .NET Reflector humorously interpreted as Chinese characters). Мы последовательно воспроизводили это на нескольких машинах, поэтому оно не похоже на аппаратное обеспечение.

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

aspnet_merge.exe/Web Project Развертывание Выход Сборки Свойства:

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

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

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

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

+0

Вы можете исправить это изображение или удалить ссылку? – Laurel

ответ

2

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

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

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

+0

Спасибо за инструменты. Я должен попробовать и сообщить о том, что он найдет.Когда я использую Reflector, чтобы посмотреть на метод нарушения (см. Скриншот выше), совершенно ясно, где сборка неверна. Будет ли PEVerify просто сказать мне *, где * это неверно или они смогут сказать * почему * также? – mckamey

+0

Если я правильно помню (с тех пор как я использовал его), да, это будет указывать, какие ошибки он обнаруживает в метаданных. Однако вам может потребоваться открыть его в ildasm, чтобы перевести некоторые из таких вещей, как токены, которые будут упомянуты в сообщениях об ошибках. PEVerify также является довольно сырым инструментом - это означает, что он не предназначен для разработчиков на каждый день, вам, возможно, придется отклонить некоторые сообщения об ошибках, чтобы узнать, о чем идет речь. –

0

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

+0

Это одна из ситуаций, когда это происходит (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx), но в этом случае это не так. Отдельные сборки работают отлично сами по себе, но сбой после объединения. – mckamey

Смежные вопросы