2015-06-19 31 views
7

Tôi có một ứng dụng .NET dường như có một số phiên bản phụ thuộc của nó thay đổi giữa gỡ lỗi và chạy dưới dạng ứng dụng bản phát hành đã cài đặt. Tôi sẽ chỉ tập trung vào việc lắp ráp Castle.Core cho các chi tiết của tôi, nhưng cùng một vấn đề xảy ra với một vài người khác là tốt. Một gói NuGet tôi đang sử dụng yêu cầu Castle.Core như là một phụ thuộc (tất cả các trường hợp của vấn đề của tôi có liên quan đến hội đồng có nguồn gốc từ NuGet, trong trường hợp nó quan trọng).Phụ thuộc lắp ráp thay đổi sau khi cài đặt

Trong Visual Studio, khi tôi cài đặt gói NuGet với Castle.Core dependency, mọi thứ chỉ chạy tốt, cả trong cấu hình Debug và Release. Tôi có thể thấy rằng tham chiếu dự án Castle.Core đang tham chiếu phiên bản 3.3.0.0. Tuy nhiên, khi tôi đóng gói tất cả mọi thứ được tạo ra bởi cấu hình phiên bản sử dụng InstallShield và cài đặt ứng dụng (với tất cả các cụm sống trong dir chương trình tương tự), tôi nhận được lỗi runtime này:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Các gói NuGet liệt kê sự phụ thuộc của nó vào Castle .Core as (≥3.2.0.0 & & < 4.0.0.0). Cả hai 3.2.0.0 và 3.3.0.0 đều thỏa mãn các điều kiện đó.

Nếu tôi hạ cấp thủ công Castle.Core xuống 3.2.0.0, tham chiếu của dự án của tôi cho thấy rằng nó đã thực sự bị hạ cấp. Nhưng khi tôi chạy dự án trong Visual studio, tôi nhận được:

Could not load file or assembly 'Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

với một ngoại lệ bên trong:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Tuy nhiên, nếu tôi sau đó gói nó vào một trình cài đặt và khởi động nó như một ứng dụng được cài đặt , nó hoạt động.

Với tôi, có cảm giác như hành động đóng gói các bộ hội đồng vào một trình cài đặt đang làm cho các phiên bản phụ thuộc thay đổi. Tôi không thể tưởng tượng được như vậy, nhưng tôi đang gặp rắc rối với một lời giải thích tốt hơn.

Có ai có thể giải thích những gì đang xảy ra ở đây và cách tôi có thể khắc phục sự cố không?

Trả lời

12

Ok, đã tìm ra. Trước tiên, facepalm

Lắp ráp được thêm qua NuGet có phụ thuộc phiên bản cụ thể trên Castle.Core 3.2.0. Tuy nhiên, bởi vì hội đồng đó vẫn có thể làm việc với Castle.Core 3.2.0-4.0.0, một chuyển hướng ràng buộc lắp ráp đã được thêm vào App.config cho biết bộ tải lắp ráp mà bất kỳ hội đồng nào yêu cầu phiên bản trong phạm vi đó nên cố gắng tải Lâu đài .Core 3.3.0, là phiên bản được đóng gói trong trình cài đặt ứng dụng của tôi. Tôi đã không nhận ra rằng tôi đã không bao gồm các tập tin cấu hình trong trình cài đặt của tôi, do đó, cấu hình đã được nạp trong Visual Studio mà không có vấn đề, trong khi các ứng dụng được cài đặt đã bị thiếu tập tin đó trong thư mục ứng dụng.

+1

Tôi sẽ không bao giờ tìm ra điều này, cảm ơn bạn đã trả lời câu hỏi của riêng bạn. –

+1

Đã lưu lại cho tôi nhiều thời gian! –

+0

Vì vậy, giải pháp là bao gồm 'App.config' trong trình cài đặt của bạn? – Jess

3

Tôi gặp vấn đề tương tự, tôi chỉ hạ cấp xuống phiên bản Moq ít nhất có sẵn và đã hoạt động.

+0

Tôi đã cố gắng sửa chữa các chuyển hướng lắp ráp nhưng nó chỉ trở nên ngày càng phức tạp. Hạ cấp làm việc cho tôi. – Phill

+0

Đẹp nhất. Cảm ơn –

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