2017-10-19 25 views
8

Chúng tôi đã nâng cấp FSharp.Core.dll như một phần của triển khai ứng dụng web trên IIS 8 (ASP.NET Web API) và bắt đầu thấy FSharp.Các ngoại lệ FileLoad ngay sau khi triển khai . FSharp.Core.dll phiên bản đã chuyển từ 4.3.0.0 thành 4.3.1.0.Nâng cấp FSharp.Các phiên bản khác, lỗi tham chiếu lắp ráp khi triển khai ứng dụng IIS

Triển khai tự động chuẩn của chúng tôi liên quan đến việc thay thế nội dung thư mục ứng dụng bằng các tệp nhị phân được cập nhật (dll), global.asax và web.config, do đó khiến IIS tái chế ứng dụng. FSharp.Core.dll được đóng gói như một phần của bản dựng. Các ứng dụng của chúng tôi được triển khai tới môi trường cân bằng tải. Các kịch bản triển khai tự động của chúng tôi sử dụng ‘robocopy’ để dọn sạch thư mục ứng dụng (mywebapp, bên dưới) và sao chép nội dung mới vào vị trí của nó.

điển hình cấu trúc thư mục ứng dụng IIS:

mywebapp/bin/fsharp.core.dll 
mywebapp/bin/custom-fsharp-lib.dll 
mywebapp/bin/custom-csharp-lib.dll 
mywebapp/bin/System.Web.Http.dll, etc… 
mywebapp/global.asax 
mywebapp/web.config 

Chúng tôi đã quan sát thấy rằng nếu các ứng dụng không được phục vụ các yêu cầu trong quá trình triển khai, sau đó việc triển khai thực hiện thành công. Tuy nhiên, nếu ứng dụng đang được tải và yêu cầu phục vụ trong việc triển khai, ứng dụng ném một ngoại lệ đối với từng yêu cầu tiếp theo ngay sau khi triển khai hoàn tất:

Unhandled POST xử lý ngoại lệ cho https://websiteName/application/endpoint: System. IO.FileLoadException Không thể tải tệp hoặc lắp ráp 'FSharp.Core, Version = 4.3.1.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a' hoặc một trong số các phụ thuộc của nó. Định nghĩa tệp kê khai của lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040) - tại WebAppFunction.Execute ... .. (vv)

Sau khi nhìn thấy ngoại lệ này, chúng tôi đã kiểm tra các tập tin nhị phân ứng dụng và thấy rằng FSharp.Core.dll phiên bản là 4.3.1.0 (tức là phiên bản nâng cấp đã được triển khai một cách chính xác) . Dường như nếu lưu lượng truy cập trong quá trình triển khai, ứng dụng mới được triển khai không thể tìm thấy phiên bản FSharp.Core.dll chính xác, mặc dù nó có trong thư mục thùng ứng dụng. Dường như ứng dụng vẫn có thể có một số thao tác trên phiên bản FSharp.Core.dll cũ.

Sự cố này vẫn tiếp diễn sau khi khởi động lại máy chủ, IISReset hoặc tái chế ứng dụng IIS. Giải pháp của chúng tôi là khôi phục triển khai cho bản dựng trước (với FSharp.Core.dll v4.3.0.0) sau đó ứng dụng đã khôi phục. Sau đó, chúng tôi triển khai bản dựng mới (với FSharp.Core.dll v4.3.1.0) cho từng máy chủ riêng lẻ trong khi rút ra khỏi bộ cân bằng tải với apppool dừng, do đó đảm bảo không tải trong khi triển khai và bản dựng mới được triển khai thành công.

Chúng tôi chưa bao giờ trước khi quan sát hành vi này trong quá trình triển khai ứng dụng web, bất kể phiên bản lắp ráp có đang được nâng cấp hay không. Có ai khác từng gặp vấn đề này với FSharp.Core.dll và nếu có, hành vi có thể được giải thích không?

Trả lời

0

Bạn có thể cần phải thêm lắp ráp chuyển hướng trong web.config của bạn:

<dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" /> 
</dependentAssembly> 

lỗi đó bạn đã mô tả đã xảy ra cho chúng tôi trước (mặc dù không phải trong thời gian chính xác của việc triển khai) và ở trên là gì luôn luôn giải quyết nó.

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