6

Natrafiliśmy na interesujący problem, którego wcześniej nie doświadczyłem. Mamy projekt aplikacji sieci Web ASP.NET 3.5 SP1 na dużą skalę w Visual Studio 2008 SP1, który jest kompilowany i wdrażany za pomocą projektu wdrożenia witryny sieci Web. Wszystko sprawdziło się dobrze przez ostatni rok, aż po wczorajszej odprawie aplikacja zaczęła krytycznie nie działać pod numerem BadImageFormatException.Czy istnieją ograniczenia rozmiaru do formatu .NET Assembly?

Dany punkt kontrolny nie zmienia niczego szczególnego, a błędy pochodzą z obszarów aplikacji, które nawet się nie zmieniły. Używając Reflectora sprawdziliśmy metody naruszające zasady, aby znaleźć kodowanie śmieci w kodzie (which .NET Reflector humorously interpreted as Chinese characters). Konsekwentnie powielało to na kilku komputerach, więc nie wydaje się być związane ze sprzętem.

Dalsza kontrola wykazała, że ​​te łańcuchy śmieci miały , a nie w zestawach używanych jako dane wejściowe do aspnet_merge.exe podczas wdrażania.

aspnet_merge.exe/Project Web Deployment Wyjście Złożenia Właściwości:

  • Merge wszystkie wyjścia do jednego zespołu
  • Merge każdego indywidualnego wyjścia folderu do własnego montażu
  • scalić wszystkie strony i wyjścia sterujące do pojedynczego zespołu
  • Utwórz oddzielny zespół dla każdej strony i wyjścia sterującego

We właściwościach projektu Web Deployment jeśli ustawiamy opcje seryjnej do pierwszej opcji („Scalanie wszystkich wyjść do pojedynczego montażu”) doświadczamy problemu, jeszcze wszystko z pozostałych opcji działa doskonale!

Moje pytanie: czy ktoś wie, dlaczego tak się dzieje? Czy istnieje ograniczenie rozmiaru do funkcji aspnet_merge.exe (wynikowa połączona biblioteka DLL wynosi około 19,3 MB)? Czy są jakieś inne znane problemy z łączeniem wyników WAP?

Uwielbiam to, jeśli jakikolwiek format Assembly/aspnet_merge.exe wiedzą o takich ograniczeniach jak ten. Wydaje mi się, że jest to Zgromadzenie 25MB, a duże, nie jest skandaliczne.

+0

Czy możesz naprawić obraz, czy usunąć link? – Laurel

Odpowiedz

2

Możesz spróbować uruchomić na nim PEVerify i zobaczyć, co otrzymasz.

Dla mnie to brzmi jak zagadnienie kodowania ... ale nie jestem pewien, dlaczego tak się stanie. Technicznie istnieje ograniczenie ilości metadanych, które mogą pasować do tabel metadanych w zespole, ale wątpię, czy to jest problem.

Możesz zobaczyć rozmiar tabel metadanych, jeśli otworzysz exe w Ildasm, możesz spróbować spojrzeć na statystyki (Widok-> Statystyki) lub liczbę tabel metadanych, która jest procesem dwuetapowym: 1. Widok-> Metainfo-> Raw: Liczba, rozmiary 2. Naciśnij Ctrl + M

+0

Dzięki za narzędzia. Będę musiał spróbować i złożyć raport z tego, co znajdzie.Kiedy używam Reflectora, aby spojrzeć na metodę obrażania (patrz powyższy screen), jest całkiem jasne, gdzie montaż jest nieprawidłowy. Czy PEVerify po prostu powiedz mi * gdzie * to nie jest poprawne, czy też mogą powiedzieć * dlaczego * również? – mckamey

+0

Jeśli dobrze pamiętam (minęło trochę czasu, odkąd go użyłem), tak będzie wskazywać, jakie błędy znajdzie w metadanych. Jednak może zajść konieczność otwarcia go w ildasm, aby przetłumaczyć niektóre elementy, takie jak tokeny, które zostaną wymienione w komunikatach o błędach. PEVerify to także całkiem surowe narzędzie - co oznacza, że ​​nie jest przeznaczone dla codziennych programistów, może być konieczne wysłanie do Google niektórych komunikatów o błędach, aby zobaczyć, o czym mówi. –

0

Czy wyjątek BadImageFormatException nie zostanie zgłoszony podczas próby uruchomienia kodu x64 na architekturze x86?

+0

Jest to jedna z sytuacji, w których tak się dzieje (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx), ale w tym przypadku nie jest tak. Poszczególne podzespoły działają bez zarzutu same w sobie, ale po ich scaleniu nie działają. – mckamey

Powiązane problemy