6

Wir stießen auf ein interessantes Problem, das ich noch nicht erlebt habe. Wir haben ein großes ASP.NET 3.5 SP1-Webanwendungsprojekt in Visual Studio 2008 SP1, das mit einem Website-Bereitstellungsprojekt kompiliert und bereitgestellt wird. Alles hat gut funktioniert für das letzte Jahr, bis nach einem Check-in gestern begann die App kritisch mit BadImageFormatException zu scheitern.Gibt es Größenbeschränkungen für das .NET-Assembly-Format?

Der fragliche Check-in ändert nichts besonders und die Fehler kommen aus Bereichen der App nicht einmal geändert. Mithilfe von Reflector haben wir die beanstandeten Methoden untersucht, um festzustellen, dass im Code ungültige Zeichenfolgen enthalten waren (which .NET Reflector humorously interpreted as Chinese characters). Wir haben dies wiederholt auf mehreren Maschinen reproduziert, so dass es nicht mit der Hardware zu tun hat.

Eine weitere Überprüfung ergab, dass diese Garbage-Strings nicht in den Assemblys vorhanden waren, die während der Bereitstellung als aspnet_merge.exe Inputs verwendet wurden.

aspnet_merge.exe/Web Deployment Project Output Baugruppen Eigenschaften:

  • Merge alle Ausgänge auf einer einzigen Baugruppe
  • jeden einzelnen Ordner Ausgang
  • Merge alle Seiten auf seine eigene Montage Merge und Steuerausgänge zu einer einzelnen Baugruppe
  • Erstellen Sie eine separate Baugruppe für jede Seite und den Steuerausgang

In den Web-Deployment-Projekteigenschaften, wenn wir die Einarbeitungsoptionen auf die erste Option („Merge alle Ausgänge auf einer einzigen Baugruppe“) zu erleben wir das Problem, doch alle der anderen Optionen perfekt funktionieren!

Meine Frage: weiß jemand, warum das passiert? Gibt es eine Größenbeschränkung für die Fähigkeiten von aspnet_merge.exe (die resultierende zusammengeführte DLL ist etwa 19,3 MB groß)? Gibt es andere bekannte Probleme beim Zusammenführen der Ausgabe von WAPs?

Ich würde es lieben, wenn irgendwelche Assembly Format/aspnet_merge.exe Gurus über solche Einschränkungen wie diese wissen. Scheint mir wie eine 25MB Assembly, während groß, ist nicht unverschämt.

+0

Können Sie das Bild korrigieren oder den Link entfernen? – Laurel

Antwort

2

Sie könnten versuchen, PEVerify darauf laufen und sehen, was Sie bekommen.

Für mich klingt es wie ein Codierproblem ... aber ich bin nicht sicher, warum das passieren würde. Die Anzahl der Metadaten, die in die Metadatentabellen in einer Assembly passen, ist technisch begrenzt, aber ich bezweifle, dass dies das Problem ist.

Sie konnten die Größe der Metadatentabellen sehen, wenn Sie die exe in Ildasm öffnen, könnten Sie versuchen, die Statistiken (View-> Statistics) oder die Anzahl der Metadatentabellen zu betrachten, was ein zweistufiger Prozess ist: 1. View-> Metainfo-> Raw: Count, Sizes 2. Drücken Sie Strg + M

+0

Danke für die Werkzeuge. Ich werde diese ausprobieren und darüber berichten müssen, was es findet.Wenn ich Reflector benutze, um die problematische Methode zu betrachten (siehe Screenshot oben), ist ziemlich klar, wo die Assembly nicht korrekt ist. Würde PEVerify einfach sagen, * wo * es nicht korrekt ist oder würden sie auch * warum * sagen können? – mckamey

+0

Wenn ich mich richtig erinnere (es ist eine Weile her, seit ich es benutzt habe), wird es ja anzeigen, welche Fehler es in den Metadaten findet. Allerdings müssen Sie es möglicherweise in ildasm öffnen, um einige der Dinge wie Tokens zu übersetzen, die in den Fehlermeldungen erwähnt werden. PEVerify ist auch ein ziemlich rohes Tool - das heißt, es ist nicht für den täglichen Entwickler entwickelt, müssen Sie möglicherweise einige der Fehlermeldungen googlen, um zu sehen, worüber es spricht. –

0

Wird die BadImageFormatException nicht ausgelöst, wenn Sie versuchen, x64-Code auf x86 auszuführen?

+0

Das ist eine der Situationen, in denen dies auftritt (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx), aber in diesem Fall ist es nicht so. Die einzelnen Assemblys funktionieren von selbst, aber fehlgeschlagen, wenn sie einmal zusammengeführt wurden. – mckamey

Verwandte Themen