Tôi vừa sao chép một dự án hiện có vào một máy hoàn toàn mới để bắt đầu phát triển nó và đã gặp vấn đề với phiên bản của một trong các hội đồng tham chiếu của tôi (một telerik DLL khi nó xảy ra).
Dự án ban đầu tham chiếu một phiên bản cũ hơn của hội đồng (hãy gọi nó là v1.0.0.0). Máy mới của tôi đã cài đặt phiên bản lắp ráp mới nhất, vì vậy tôi nghĩ rằng tôi đã cập nhật nó (hãy gọi phiên bản mới v2.0.0.0).
Bây giờ đây là vấn đề: Nếu tôi sao chép dll v1.0.0.0 cũ vào thư mục dự án và thêm nó làm tài liệu tham khảo, trang web sẽ khởi chạy mà không gặp vấn đề gì. Nếu tôi xóa tham chiếu đó (và cũng xóa DLL cũ khỏi hệ thống của tôi) và thêm phiên bản mới (v2.0.0.0), trang sẽ hiển thị ngoại lệ sau:
Không thể tải tệp hoặc lắp ráp 'XXXXXX, Phiên bản = 1.0.0.0, Văn hóa = trung tính, PublicKeyToken = 121fae78165ba3d4' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040)
Rõ ràng, mã đang tìm phiên bản lỗi thời và không thể tìm thấy nó. Nhưng tại sao?
Tôi đã lấy thư mục giải pháp cho số phiên bản đó và không thể tìm thấy một tài liệu tham khảo nào. Tôi đã kiểm tra lại văn bản của tệp .csproj và thấy phiên bản hiển thị chính xác phiên bản mới nhất và HintPath hiển thị chính xác đường dẫn đến DLL mới. Hơn nữa, vì tôi không cài đặt DLL cũ trên hệ thống nên nó không hiển thị trong GAC của tôi (mặc dù v2.0.0.0, như mong đợi).
Sau đó, tôi đã kích hoạt trình xem nhật ký hợp nhất để cố gắng tìm hiểu tại sao nó tìm phiên bản cũ đó, nhưng không gặp may:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Tất cả nói rằng nó bắt đầu bằng cách tìm kiếm lắp ráp cũ. Tôi đã cố gắng tìm một giải pháp trực tuyến và thấy câu hỏi SO tương tự này , nhưng dường như nó hoàn toàn ngược lại với vấn đề của tôi. Chương trình của người hỏi đó đã tìm thấy DLL sai thay vì tham chiếu. Trong khi đó, vấn đề của tôi là chương trình đang tìm kiếm DLL sai và không thể tìm thấy nó khi có thể tìm thấy đúng địa chỉ trong thư mục bin và trong GAC.
Tại sao tôi tìm kiếm phiên bản cũ? Tôi có thể tìm kiếm ở đâu để tìm tài liệu tham khảo xấu này?