Đây là một loại dưa chua khá khó chịu mà chúng tôi đã đưa vào trang web của khách hàng. Khách hàng có khoảng 100 máy trạm, trên đó chúng tôi đã triển khai phiên bản 1.0.0 của sản phẩm "MyApp".Thay đổi giao diện giữa các phiên bản - cách quản lý?
Bây giờ, một trong những thứ mà sản phẩm làm là tải lên một bổ trợ (gọi nó là "MyPlugIn", mà nó đầu tiên tìm kiếm trên một máy chủ trung tâm để xem có phiên bản mới hơn không, và nếu có thì nó sao chép tập tin đó tại địa phương, sau đó nó tải lên add-in bằng cách sử dụng Assembly.Load
và gọi một giao diện được biết đến nhất định.Điều này đã hoạt động tốt trong vài tháng. máy (nhưng không phải tất cả) Nó đi kèm với một phiên bản mới và cập nhật của MyPlugIn
Nhưng sau đó đã xảy ra sự cố.Có một DLL được chia sẻ, được tham chiếu bởi cả MyApp và MyPlugIn, được gọi là MyDLL, có một phương thức MyClass.MyMethod
. Giữa v1.0.0 và v1.0.1, chữ ký của MyClass.MyMethod
đã thay đổi (một tham số đã được thêm). Và bây giờ là phiên bản mới của MyPlugIn làm cho các ứng dụng client v1.0.0 sụp đổ:
Phương pháp không tìm thấy: MyClass.MyMethod (System.String)
Client châm chọc không muốn triển khai v1 .0.1 trên tất cả các trạm khách, là sửa chữa được bao gồm trong v1.0.1 là cần thiết chỉ cho một vài máy trạm, và không cần phải cuộn nó ra cho tất cả các máy khách. Đáng buồn thay, chúng tôi chưa (chưa) sử dụng ClickOnce hoặc các tiện ích triển khai hàng loạt khác, do đó, tung ra phiên bản v1.0.1 sẽ là một bài tập đau đớn và không cần thiết.
Có cách nào đó để viết mã trong MyPlugin để nó hoạt động tốt như nhau, không phân biệt liệu nó có giao dịch với MyDLL v1.0.0 hoặc v1.0.1 không? Có lẽ có một số cách để thăm dò cho một giao diện dự kiến bằng cách sử dụng phản ánh để xem nếu nó tồn tại, trước khi thực sự gọi nó?
CHỈNH SỬA: Tôi cũng nên đề cập - chúng tôi có một số quy trình QA khá chặt chẽ. Vì v1.0.1 đã được chính thức phát hành bởi QA, chúng tôi không được phép thực hiện bất kỳ thay đổi nào đối với MyApp hoặc MyDLL. Sự tự do duy nhất của phong trào mà chúng tôi có là thay đổi MyPlugin, là mã tùy chỉnh được viết riêng cho khách hàng này.
Tại sao không thêm lại vào MyDll phương thức được mong đợi bởi phiên bản plugin cũ? Bên trong phương thức này có thể gọi phiên bản phương thức mới chuyển một giá trị mặc định cho tham số phương thức mới. – Steve
@Steve - xem chỉnh sửa của tôi - không thể thực hiện bất kỳ thay đổi nào đối với MyDLL –
Is MyClass.MyMethod có tĩnh không? –