6

Chúng tôi gặp phải một vấn đề thú vị mà trước đây tôi chưa từng trải qua. Chúng tôi có một quy mô lớn sản xuất ASP.NET 3.5 SP1 dự án ứng dụng web trong Visual Studio 2008 SP1 được biên dịch và triển khai bằng cách sử dụng một dự án triển khai trang web. Tất cả mọi thứ đã làm việc tốt cho năm ngoái, cho đến sau khi một kiểm tra trong ngày hôm qua các ứng dụng bắt đầu nghiêm trọng thất bại với BadImageFormatException.Có giới hạn về kích thước đối với định dạng .NET Assembly không?

Đăng ký được đề cập không thay đổi bất kỳ điều gì đặc biệt và các lỗi đến từ các khu vực của ứng dụng thậm chí không thay đổi. Sử dụng Reflector, chúng tôi đã kiểm tra các phương thức vi phạm để tìm ra rằng có các chuỗi rác trong mã (which .NET Reflector humorously interpreted as Chinese characters). Chúng tôi đã liên tục sao chép điều này trên một số máy vì vậy nó dường như không liên quan đến phần cứng.

Kiểm tra thêm cho thấy rằng các chuỗi rác đó đã làm không phải là tồn tại trong các Hội đồng được sử dụng làm đầu vào cho aspnet_merge.exe trong khi triển khai.

aspnet_merge.exe/Web Deployment Project Output Assemblies Thuộc tính:

  • Merge tất cả các kết quả đầu ra để một hội duy nhất
  • Merge mỗi đầu ra thư mục cá nhân để lắp ráp riêng của mình
  • Merge tất cả các trang và các đầu ra điều khiển cho một assembly đơn
  • Tạo một hội đồng riêng biệt cho mỗi trang và đầu ra điều khiển

Trong các tính chất dự án triển khai web nếu chúng ta thiết lập các tùy chọn hợp nhất để tùy chọn đầu tiên ("Hợp nhất tất cả các kết quả đầu ra để một hội duy nhất"), chúng tôi gặp vấn đề, tuy nhiên tất cả trong những lựa chọn khác làm việc một cách hoàn hảo!

Câu hỏi của tôi: có ai biết tại sao điều này xảy ra không? Có một giới hạn kích thước để khả năng của aspnet_merge.exe (kết quả DLL sáp nhập là khoảng 19,3 MB)? Có bất kỳ vấn đề đã biết nào khác khi hợp nhất đầu ra của WAP không?

Tôi rất thích nó nếu bất kỳ định dạng Assembly/aspnet_merge.exe rất kinh nghiệm về bất kỳ hạn chế như thế này. Dường như với tôi như một hội 25MB, trong khi lớn, không phải là thái quá.

+0

Bạn có thể sửa hình ảnh hoặc xóa liên kết không? – Laurel

Trả lời

2

Bạn có thể thử chạy PEVerify trên đó và xem những gì bạn nhận được.

Đối với tôi, nó có vẻ như là sự cố mã hóa ... nhưng tôi không chắc tại sao điều đó lại xảy ra. Về mặt kỹ thuật, có một giới hạn về số lượng siêu dữ liệu có thể phù hợp với các bảng siêu dữ liệu trong một hội đồng, nhưng tôi nghi ngờ nếu đó là vấn đề.

Bạn có thể thấy kích thước của bảng siêu dữ liệu nếu bạn mở exe trong Ildasm, bạn có thể thử xem số liệu thống kê (View-> Statistics) hoặc đếm số siêu dữ liệu là một quy trình 2 bước: 1. View-> Metainfo-> Raw: Count, Sizes 2. Nhấn Ctrl + M

+0

Cảm ơn các công cụ. Tôi sẽ phải thử và báo cáo lại những gì nó tìm thấy.Khi tôi sử dụng Reflector để xem xét các phương pháp vi phạm (xem ảnh chụp màn hình ở trên), nó là khá rõ ràng, nơi lắp ráp là không chính xác. PEVerify sẽ chỉ cho tôi biết * nơi * nó không chính xác hoặc họ sẽ có thể nói * tại sao * là tốt? – mckamey

+0

Nếu tôi nhớ lại chính xác (đã lâu rồi kể từ khi tôi sử dụng nó), có, nó sẽ cho biết lỗi nào tìm thấy trong siêu dữ liệu. Tuy nhiên bạn có thể cần phải mở nó trong ildasm để dịch một số những thứ như thẻ sẽ được đề cập trong các thông báo lỗi. PEVerify cũng là một công cụ khá thô - có nghĩa là nó không được thiết kế cho các nhà phát triển mỗi ngày, bạn có thể phải google một số thông báo lỗi để xem những gì nó đang nói về. –

0

Không phải BadImageFormatException bị ném khi bạn cố gắng chạy mã x64 trên x86?

+0

Đó là một trong những tình huống xảy ra điều này (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx) nhưng trong trường hợp này không phải vậy. Các hội đồng cá nhân làm việc tốt bằng chính mình nhưng thất bại khi sáp nhập. – mckamey

Các vấn đề liên quan